Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数范围与对象范围_Javascript_Scope - Fatal编程技术网

Javascript函数范围与对象范围

Javascript函数范围与对象范围,javascript,scope,Javascript,Scope,我已经到了尝试用一些更先进的概念来充实我的javascript知识的地步 我想我非常了解scope的工作原理。对象从原型继承,然后从全局范围继承,而函数本身提供更传统的块范围 我很难理解的是: function a(){ console.log(this.z); } a.z = 12; a(); //returns undefined :( 我原以为会有12个,但当然没有。z存储在哪里?示例中的“this”指的是什么?调用函数时,JavaScript将当前上下文(this)设置为调

我已经到了尝试用一些更先进的概念来充实我的javascript知识的地步

我想我非常了解scope的工作原理。对象从原型继承,然后从全局范围继承,而函数本身提供更传统的块范围

我很难理解的是:

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<代码>此
通常不引用函数对象(与函数范围完全无关!);相反,它指的是看到灯泡熄灭的功能的“上下文”。我看到的许多代码模式现在都有意义了。非常感谢。