var存在变量提升,即:在其作用域之前调用,会返回undefined。
let, const 不存在变量提升,即::在作用域之前调用会报错并提示在作用域之前无法调用。
函数function存在变量提升,即:在声明函数作用域内,之前调用与之后调用效果一样。注意:函数声明与调用其函数体内的变量作用域问题。
foo()
let b = 1
function foo(){
console.log(b); // Cannot access 'b' before initialization
}
注意:有一种声明变量的方式。
// 一
a = 1
console.log(a) // 1
// 二
(function(){
console.log(a); // a is not defined
})()
a = 1
这种声明方式没有使用var,let,const,所以不会有变量提升的效果。
其作用域类似于var。