这在全球范围内

该声明:

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将会引发错误。