Javascript函数作用域vs对象作用域
Javascript Function Scope vs Object Scope
我已经到了我试图用一些更高级的概念来充实我的javascript知识的地步。
我想我非常了解作用域是如何工作的。对象继承原型,然后是全局作用域,而函数在自身内部提供更传统的块作用域。
我不能理解的是:
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
。
相关文章:
- 向Angular作用域对象添加对象数组——TypeError
- 阻止控制器创建新的作用域对象
- 本地作用域对象
- 更新侧自调用函数中的外部作用域对象
- Javascript:替换函数的作用域对象
- 自定义指令中作用域对象内的嵌套对象
- 在作用域对象中定义但不可访问的属性
- 在绑定元素时从作用域对象添加格式
- AngularJs:将作用域对象的属性绑定到指令
- 正在与子指令作用域共享作用域对象
- 如何在显示之前格式化作用域对象中的数据
- 监视包含特殊字符作为关键字的作用域对象
- AngularJS指令没有设置第二级作用域对象
- AngularJS指令访问相同的作用域对象——避免覆盖
- 在Angular应用之外分配作用域对象
- Angularjs的ng-repeat带过滤器作用域对象
- 将作用域对象传递给可以监视和更新它的服务
- 如何将变量求值到局部作用域对象's属性,而不是JavaScript中的全局范围
- 如何在ng类指令中计算作用域对象
- AngularJS在调用rest式服务和作用域对象更新后选择值丢失