Javascript函数范围与对象范围
我已经到了尝试用一些更先进的概念来充实我的javascript知识的地步 我想我非常了解scope的工作原理。对象从原型继承,然后从全局范围继承,而函数本身提供更传统的块范围 我很难理解的是:Javascript函数范围与对象范围,javascript,scope,Javascript,Scope,我已经到了尝试用一些更先进的概念来充实我的javascript知识的地步 我想我非常了解scope的工作原理。对象从原型继承,然后从全局范围继承,而函数本身提供更传统的块范围 我很难理解的是: function a(){ console.log(this.z); } a.z = 12; a(); //returns undefined :( 我原以为会有12个,但当然没有。z存储在哪里?示例中的“this”指的是什么?调用函数时,JavaScript将当前上下文(this)设置为调
function a(){
console.log(this.z);
}
a.z = 12;
a(); //returns undefined :(
我原以为会有12个,但当然没有。z存储在哪里?示例中的“this”指的是什么?调用函数时,JavaScript将当前上下文(
this
)设置为调用它的对象。如果函数未附加到任何对象,默认情况下将使用全局对象(窗口
浏览器中的对象)*
因此,在这种情况下,this
指的是全局对象,而不是a
。在全局对象中,z
尚未定义。这就是它返回未定义的的原因
要获得值12,您需要像这样访问它
function a() {
console.log(a.z); // Use `a` itself, instead of `this`.
}
a.z = 12;
a();
*在严格模式下,如果在没有任何明确对象引用的情况下调用函数,此
将设置为未定义
A();将忽略要设置的z。您可以这样做:a=新a();a.z=12<代码>此
通常不引用函数对象(与函数范围完全无关!);相反,它指的是看到灯泡熄灭的功能的“上下文”。我看到的许多代码模式现在都有意义了。非常感谢。