《你不知道的JavaScript(上)》筆記——關於this

this 指向函數的做用域是一種常見的誤解,this 在任何狀況下都不指向函數的詞法做用域。 在 JavaScript 內部, 做用域確實和對象相似, 可見的標識符都是它的屬性。 可是做用域「對象」 沒法經過 JavaScript代碼訪問, 它存在於 JavaScript 引擎內部javascript

function foo() {
    var a = 2;
    this.bar(); // 調用 bar() 最天然的方法是省略前面的 this, 直接使用詞法引用標識符。你不能使用 this 來引用一個詞法做用域內部的東西。
}

function bar() {
    console.log( this.a );
}

foo(); // ReferenceError: a is not defined

每當你想要把 this 和詞法做用域的查找混合使用時, 必定要提醒本身, 這是沒法實現的。java

this 的綁定和函數聲明的位置沒有任何關係, 只取決於函數的調用方式。函數

當一個函數被調用時, 會建立一個活動記錄(有時候也稱爲執行上下文)。 這個記錄會包含函數在哪裏被調用(調用棧)、 函數的調用方法、 傳入的參數等信息。 this 就是記錄的其中一個屬性, 會在函數執行的過程當中用到。this

相關文章
相關標籤/搜索