“没有用var声明的为全局变量”这种说法不准确
结论:
“没有用var声明的变量为全局变量”这样的说法不太正确,需要在这句话前面加一个前提,如果①变量前面没有用var声明,②在变量所在在的作用域链中没有这个变量名称,则设置该变量为全局变量。
代码
var n = 0;
function foo(){
var n = 1;
return function bar(){
n = 2;
}
}
foo();
console.log(n);//0
这个例子中作用域链为bar--->foo---->window
n=2沿着作用域链找到foo作用域中n(原来等于1),然后将foo作用域中的n改为2,不够全局作用域中n=0没有变化
如果把代码改成下面这样
var n = 0;
function foo(){
n = 1;
return function(){
var n = 2;
}
}
foo();
console.log(n);//1

浙公网安备 33010602011771号