嗨我有以下JavaScript代碼,我試圖運行。我的目標是在不同的範圍和不同類型的JavaScript調用中掌握this
的含義。與JavaScript中的「this」對象混淆匿名函數
如果你看下面的代碼:我有一個內部匿名函數,它被分配到innerStuff
變量。在這樣的匿名函數中,this
指向window
對象,而不是外部函數對象或其他任何東西。儘管它仍然可以訪問out函數的變量。
無論如何,我不確定,爲什麼會這樣;但如果你看下面的代碼,我通過this
的形式that
到innerStuff
以後,它工作得很好,並在控制檯打印對象doofus
屬性。
var someStuff = {
doofus:"whatever",
newF: function()
{
var that = this;
console.log(that);
var innerStuff = function(topThis){
console.log(topThis);
};
return innerStuff(that);
}
}
someStuff.newF();
現在我只是稍微改變一個代碼。而不是將其分配給innerStuff
,我就直接調用它返回的功能,如下圖所示:
var someStuff = {
doofus:"whatever",
newF: function()
{
var that = this;
console.log(that);
return function(that){
console.log(that);
}();
}
}
someStuff.newF();
此打印未定義內部匿名函數。是否因爲參數that
和外部函數中定義的that
之間有衝突? 我以爲參數會覆蓋可見性。爲什麼價值不被保留?
這是非常令人困惑的。
另一方面,如果我沒有通過that
,而只是使用它,因爲知名度是存在的,結果是正確的和預期的。
我錯過了什麼?這是變量之間的衝突,存在於相同的範圍內嗎? 有沒有很好的理由,那內部函數有this
綁定到window
對象?
啊!!我不能相信我錯過了這一點。萬分感謝。 – Priyank 2009-12-30 18:09:18
那麼,它*與完全不同於在其他語言中綁定方法是如何工作的... – bobince 2009-12-30 18:28:46