打印window.a,结果undefined;打印a,报错

254 阅读1分钟

对于未定义的a访问window.a和a,本质在于访问属性是在原型链上查找访问变量是在作用域链上查找

window.a相当于式查找对象上的a属性,当访问对象的属性时会到这个对象的属性上去查找,如果没有找到就会到该对象的__proto__上去查找,也就是构造函数prototype上查找,如果没有会一直在__proto__上查找,直到最顶层,如果还是没有则返回undefined。

访问a,相当于是查找变量,查找变量的时候会在当前作用域中进行查找,如果查找不到就会到外层作用域进行查找,直到查找到全局作用域(即查找完整个作用域链),如果查找不到就会报错。

两者区别:
作用域链是相对于变量而言,最顶层是window
原型是相对于属性而言,最顶层是Object