Javascript 函数作用域与对象作用域

标签 javascript scope

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

我想我非常了解范围的工作原理。对象从原型(prototype)继承然后是全局作用域,而函数在其内部提供更传统的 block 作用域。

我很难理解的是:

function a(){
  console.log(this.z);
  }

a.z = 12;

a(); //returns undefined :(

我期待回显 12,但当然不是。 z 到底存储在哪里?示例中的“this”指的是什么?

最佳答案

当您调用一个函数时,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

关于Javascript 函数作用域与对象作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602221/

相关文章:

javascript - react : Close a modal clicking outside

objective-c - Objective C : Names, 绑定(bind)和范围

javascript - 如何在递归函数中使用闭包而不丢失 JavaScript 的作用域?

python - 如何将 tf.layers 变量放入 tf.name_scope/tf.variable_scope 中?

java - 如何在 XML 中设置 Spring Scope

javascript - 如何获取对象数组对象的 Angular 长度

JavaScript 按值复制数组

javascript - Vue 兄弟组件 Hook 生命周期关系

javascript - 按值获取数组索引

Javascript 函数未在 document.ready jquery 代码中定义