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