第一节:预解释作用域this原理及应用
课时3:全局变量的细节问题
在全局作用域中,带var和不带var的关系:
- 区别:带var的可以进行预解释,所以在赋值的前面执行不会报错;不带var的是不能进行预解释的,在前面执行会报错
- 相同点:num2 = 12;相当于给window增加了一个叫做num2的属性名,属性值为12;
var num = 12; 首先它相当于给全局作用域增加了一个全局变量num,但是不仅如此,它也相当于给window增加了一个属性名num,属性值为12
例题1:
console.log(num); //undefined
var num = 12;
console.log(num2); //Uncaught ReferenceError: num2 is not defined
num2 = 12;
例题2:
var num = 12;
console.log(num);
num2 = 12;
console.log(num2);
私有作用域中出现了一个变量不是私有的,则往上级作用域进行查找,一直找到window为止,如果window中没有:
- 如果是获取值:console.log(total); ——> 报错
- 如果是设置值:total = 100; ——> 相当于给window增加了一个属性名total,属性值为100
例题3:
function fn(){
console.log(total);
total = 100;
}
fn();
console.log(total);