for( var item in this){
console.log( item );
}
在全球范围内是否是noop。但是在一个函数中
function foo(){
for( var item in this){
console.log( item );
}
}
foo();
这会生成全局环境对象。 这种行为的原因是什么?
访问当前范围内的对象的语法是什么,如第一个样本?
答案 0 :(得分:2)
在JavaScript中,“this”不是当前对象,而是当前方法的运行上下文。
例如:
function foo(){
console.log(this);
}
在全球范围内:
调用方法的最佳方法是使用Function对象的call方法在调用方法时绑定自己的运行上下文。
foo.call(this);
抱歉我的英语不好。 ^ - ^
答案 1 :(得分:1)
查看MDN's introduction to the this
keyword。
在全局范围内,this
指的是全局对象。
在严格模式下(您似乎没有启用),一个简单的函数调用会导致undefined
这个值。
对于非严格函数(如foo
),简单调用会导致this
再次成为全局对象。
答案 2 :(得分:1)
this
可能指向节点的导出对象。
所以在第一种情况下,this
是不是指向window
对象。在第二种情况下,this
位于函数内部(不是对象的方法),因此,正如您所期望的那样,它指向window
。
答案 3 :(得分:1)
ECMA-262 §10.4.1.1表明在输入全局执行上下文时,this
被设置为全局对象。因此,如果第一个代码示例在全局上下文中执行,this
应该引用全局对象。
我没有node.js
,但如果这是主机环境,您应该在问题中添加node.js
标记,以吸引了解node.js
的人。
在第二个示例中,调用未设置函数this
,因此它默认为全局对象。在严格模式下,它将是未定义的,尝试访问this
将引发错误。