关于var
1.允许二次定义
var x = 10;console.log(x);//10
var x = 20;console.log(x);//20
2.存在变量提升
var x = 10;
function test(){
console.log(x);//undefined
var x = 10;
}
test();
3.变量提升个人理解
根据文章let深入理解的理解,变量创建步骤细分为:创建>初始化>赋值。
当调用test函数,进入一个执行环境,收集变量对象(变量,test函数内的函数),提升到该环境顶端,创建var定义的变量x,同时初始化为undefined。
所以var变量提升包括创建和初始化undefined。
4.污染全局作用域
for(var i =1;i<5;i++){
}
console.log(window.i);//5
5.隐式变量不存在提升
console.log(a);//Uncaught ReferenceError: a is not defined
a = 'aaa';
关于let
1.存在块级作用域
{