2017-10-05 58 views
1

我遇到了一個Javascript示例,但對於正確性還是不滿意,或者對this內部函數的範圍感到困惑。看下面的例子:在第二次fn函數調用期間爲什麼輸出爲2?

var length = 10; 
function fn() { 
    console.log(this.length); 
} 

var obj = { 
    length: 5, 
    method: function(fn) { 
    fn(); 
    arguments[0](); 
    } 
}; 

obj.method(fn, 1); 

第一次10登錄這是可以理解的,因爲它是從全局範圍內調用。然而第二次登錄2這讓我感到困惑。我尋找答案,這就是我得到的 -

我們知道我們可以使用arguments []數組訪問任何數量的參數在JavaScript 函數中。

因此arguments0不過是調用fn()。現在裏面FN,此功能的 範圍變參數數組,並記錄 長度的參數[]會返回2

有沒有人有更好的回答這個嗎?

回答

0

你叫arguments[0]();

this的價值,因此是一樣的arguments

的參數爲:fn, 1

有他們的2。

arguments.length因此是2

+0

那麼它意味着所有重要的是函數的調用者而不是它被調用的範圍/塊? – dhawal

+1

在這種情況下。是。範圍與'this'的值無關(當然,除非你使用箭頭函數將'this'的值從它們創建的範圍中複製出來)。 – Quentin

+0

明白了。請記住這一點。 '這個'不那麼容易;) – dhawal

相關問題