变量声明和函数声明在编译时会被提示
当然是指的用var声明的变量,用let声明的变量不会被提升
-
变量提升
console.log(a); var a = 2;
上面的代码会输出
undefined
var a; console.log(a); a = 2;
实际上,经过提升之后等效于上面的代码
-
let、const定义的变量不会提升
console.log(a); let a = 2;
由于不会提升,所以执行上面的代码会报
ReferenceError
错误 -
函数提升
foo(); function foo() { console.log(2); }
执行上面的代码能正确的输出
2
-
函数提升由于变量提升(当函数名和变量名重名时)
foo(); var foo = 1; function foo() { console.log(2); }
上面的代码执行后会输出
2
,由于函数的提升会由于变量的提升
-
每个作用域都会进行提升操作
上面的代码事例都是在全局作用域中演示的变量提升,其实
在每个作用域重都会进行提升操作
foo(); function foo() { bar(); function bar() { console.log(2); } }
上面的代码执行后会输出
2
。由于在foo函数作用域下也进行了函数提升
网友评论