1. 程式人生 > 其它 >通俗易懂JavaScript this 指向

通俗易懂JavaScript this 指向

  Javascript 是一個文字作用域的語言,就是說, 一個變數的作用域, 在寫這個變數的時候確定。this 關鍵字是為了在 JS 中加入動態作用域而做的努力。所謂動態作用域, 就是說變數的作用範圍,是根據函式呼叫的位置而定的, 從這個角度來理解 this, 就簡單的多。

  this 是 JS 中的動態作用域機制, 具體來說有四種, 優先順序有低到高分別如下:

const obj = {
   foo() { console.log(this.num)},
   num: 1
}

let num = 2

const foo = obj.foo

obj.foo() // 1

foo() 
// 2

  1. 預設的 this 繫結, 就是說 在一個函式中使用了 this, 但是沒有為 this 繫結物件. 這種情況下, 非嚴格預設, this 就是全域性變數 Node 環境中的 global, 瀏覽器環境中的 window。嚴格模式下,預設this為undefined。
  2. 隱式繫結: 使用 obj.foo() 這樣的語法來呼叫函式的時候, 函式 foo 中的 this 繫結到 obj 物件.
  3. 顯示繫結: foo.call(obj, ...), foo.apply(obj,[...]), foo.bind(obj,...)
  4. 構造繫結: new foo() , 這種情況, 無論 foo 是否做了繫結, 都要建立一個新的物件, 然後 foo 中的 this 引用這個物件.

原文:https://www.ruanyifeng.com/blog/2018/06/javascript-this.html 下的評論