我已经达到了这样的程度,我试图通过一些更有希望的概念来填写我的javascript知识。
我想我非常了解范围如何运作。对象继承自原型然后继承全局范围,而函数本身提供了更传统的块范围。
我无法理解的是:
function a(){
console.log(this.z);
}
a.z = 12;
a(); //returns undefined :(
我期待回应12,但当然,事实并非如此。 z存储在哪里? “this”在示例中引用了什么?
答案 0 :(得分:1)
当您调用函数时,JavaScript会将当前上下文(this
)设置为调用它的对象。如果该函数未附加到任何对象,则默认情况下将使用全局对象(浏览器中的window
对象) * 。
因此,在这种情况下,this
指的是全局对象,而不是a
。在全局对象中,尚未定义z
。这就是它返回undefined
的原因。
要获得值12,您需要像这样访问它
function a() {
console.log(a.z); // Use `a` itself, instead of `this`.
}
a.z = 12;
a();
*在严格模式下,如果在没有任何显式对象引用的情况下调用函数,this
将设置为undefined
。