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
有沒有人有更好的回答這個嗎?
那麼它意味着所有重要的是函數的調用者而不是它被調用的範圍/塊? – dhawal
在這種情況下。是。範圍與'this'的值無關(當然,除非你使用箭頭函數將'this'的值從它們創建的範圍中複製出來)。 – Quentin
明白了。請記住這一點。 '這個'不那麼容易;) – dhawal