这在全球范围内
该声明:
for( var item in this){ console.log( item ); }
在全球范围内是一个不行的。 但是在一个函数中
function foo(){ for( var item in this){ console.log( item ); } } foo();
这会产生全局环境对象。 这种行为的原因是什么?
在第一个示例中,访问当前在范围内的对象的语法是什么?
this
可能指向节点的导出对象。
所以在第一种情况下, this
是正确的,不要指向window
对象。 在第二种情况下, this
是在一个函数内(这不是一个对象的方法),所以如你所期望的那样,它指向window
。
在JavaScript中,“this”不是当前对象,而是当前方法的运行上下文。
例如 :
function foo(){ console.log(this); }
在全球范围内:
- 如果我调用foo() ,则控制台日志全局
- 如果我调用setTimeout(foo,0) ,控制台会loggingTimer对象,因为foo是由定时器调用的。
调用方法的最好方法是使用Function对象的调用方法在调用方法时将自己的运行环境绑定到自己。
foo.call(this);
对不起,我的英语不好。 ^ – ^
看看MDN对this
关键字的介绍 。
在全球范围内, this
是指全球性的对象。
在严格模式(你似乎没有启用),一个简单的函数调用导致一个undefined
这个值。
对于非严格的函数(比如你的foo
),一个简单的调用会导致this
成为全局对象。
ECMA-262§10.4.1.1显示,当进入全局执行上下文时, this
被设置为全局对象。 因此,如果第一个代码示例在全局上下文中执行, this
应该引用全局对象。
我没有node.js
,但是如果这是主机环境,则应该在问题中添加一个node.js
标记来吸引知道node.js
。
在第二个示例中,该函数不是由调用设置的,所以它默认为全局对象。 在严格模式下,它将是未定义的,试图访问this
将会引发错误。