第一题,window.a = 1 和 var a = 1 的区别和联系。一个是给全局的对象 window 加一个属性,一个是定义个全局的对象。如果在一个函数中要获取自由变量 a 的话,根据作用域规则,会先去根据父级作用域,找不到则继续往上一级一级的查找(作用域链),最后找到全局作用域。如果全局作用域找不到,则去 window 下找属性。具体可以这么代码演示一下。
window.a = 1;
var a = 2;
window.b = 10;
function fn() {
console.log(a); // 2
console.log(b); // 10
}
fn();