聲明:這在全球範圍內
for(var item in this){
console.log(item);
}
是全球範圍內一個空操作。然而在一個函數中
function foo(){
for(var item in this){
console.log(item);
}
}
foo();
這產生全局環境對象。 這種行爲的原因是什麼?
與第一個示例中一樣,訪問當前處於範圍內的對象的語法是什麼?
聲明:這在全球範圍內
for(var item in this){
console.log(item);
}
是全球範圍內一個空操作。然而在一個函數中
function foo(){
for(var item in this){
console.log(item);
}
}
foo();
這產生全局環境對象。 這種行爲的原因是什麼?
與第一個示例中一樣,訪問當前處於範圍內的對象的語法是什麼?
this
可能指向節點的導出對象。
所以在第一種情況下,this
是正確的,不要指向window
對象。在第二種情況下,this
在函數內(這不是對象的方法),因此,如您所期望的那樣,它指向window
。
exports是Node中定義的對象嗎? –
是http://nodejs.org/api/modules.html#modules_module_exports – banzomaikaka
@ JOPLOmacedo - 那麼如何以嚴格模式安全的方式訪問node.js中的全局對象?有理由這樣做嗎? – RobG
看看MDN's introduction to the this
keyword。
在全局範圍內,this
引用全局對象。
在嚴格模式下(您似乎沒有啓用),一個簡單的函數調用會導致這個值爲undefined
。
對於非嚴格函數(如foo
),一個簡單的調用將導致this
再次成爲全局對象。
ECMA-262 §10.4.1.1顯示當進入全局執行上下文時,this
被設置爲全局對象。因此,如果第一個代碼示例在全局上下文中執行,則this
應引用全局對象。
我沒有node.js
,但如果這是主機環境,則應該在問題中添加一個node.js
標記以吸引知道node.js
的人。
在第二個示例中,函數的this
未由調用設置,因此它默認爲全局對象。在嚴格模式下,它將不確定,嘗試訪問this
會引發錯誤。
看來,node.js全局對象混淆了我的想法。 –
在JavaScript中,「this」不是當前對象,而是當前方法的運行上下文。
例如:
function foo(){
console.log(this);
}
在全球範圍內:
調用方法的最佳方法是使用Function對象的調用方法在調用方法時綁定自己的運行上下文。
foo.call(this);
對不起我的英語不好。^-^
是的,只是在小提琴中測試它http://jsfiddle.net/joplomacedo/Luvbp/ - 按預期工作。 – banzomaikaka
我在node.js中運行這個。這不是語言定義的質量嗎? –
節點可能是原因... – 0x499602D2