在全局作用域中,带var和不带var的关系
区别:带var是可以进行预解释,所以在赋值的前面执行不会报错;不带var的是不能进行预解释的,在前面执行会报错(ReferenceError)。
console.log(num); // -> undefined
var num = 12;
console.log(num2); // ReferenceError: num2 is not defined
num2 = 12;
关系:num2 = 12; -> 相当于给window增加了一个叫做num2的属性名,其属性值为12。
var num = 12; -> 相当于给全局作用域增加了一个全局变量num,但是不仅如此,它也相当于给window增加了一个属性名num,属性值是12。
var num = 12;
console.log(num); // 12
num2 = 12;
console.log(num2); // 12 -> window.num2 = 12
私有作用域中出现的一个变量不是私有的,则往上级作用域进行查找,上级没有,则继续向上查找,一直找到window为止,如果window下也没有?
第一种情况:我们是获取值:console.log(total); -> 报错了,ReferenceError。
function fn() {
console.log(total); // ReferenceError
total = 100;
}
fn();
console.log(total); // 100
第二种情况:total = 100; -> 相当于给window增加了一个属性名total,属性值是100
function fn() {
// console.log(total); // ReferenceError
total = 100;
}
fn();
console.log(total); // 100
JavaScript中如果在没有进行任何特殊处理的情况下,上面一行代码报错,下面的代码都不再执行了。