2017年12月3日 星期日

about javascript this keyword

結論:

於某物件的方法(函式)之最外層(不在其他函式底下)執行環境(註1)中,this 指向該物件本身。
其餘其他情況, this 都指向 global 物件

註1:
每個函式被呼叫時js engine都會為各函式建立一個執行環境

範例


避免 this 關聯混淆的方法:

範例


特殊情況:

可使用call、apply於每次執行函式時傳入物件做為 this 參照
call 與 apply 的首個參數都是 this 參照的 obj,差別在於 call 第2個參數開始是一般參數傳入,apply則是第2個函數為陣列,內容為一般參數

使用函式的通用 bind 方法可綁定函式中 this 指向的物件, bind 方法接收 this 指向的物件,並傳回綁定 this 物件後的新函式


arrow function:

其中的 this 是延用其 lexical context 的 this
白話說就是該 arrow function 所在 scope 的 this 指向的物件
arrow function 中的 arrow function 關聯到的 this 都相同

特殊情況中指定 obj 的方式對 arrow function 沒有作用,不影響其 this 指向的物件