本題地址: https://github.com/YvetteLau/Step-By-Step/issues/1
全局環(huán)境
無論是否在嚴格模式下娄昆,在全局執(zhí)行環(huán)境中(在任何函數(shù)體外部)this 都指向全局對象佩微。
函數(shù)(運行內(nèi))環(huán)境
- 簡單調用(此調用未設置this)
非嚴格模式下,this 的值默認指向全局對象萌焰。
在嚴格模式下哺眯,this將保持他進入執(zhí)行環(huán)境時的值。如果 this 沒有被執(zhí)行環(huán)境(execution context)定義扒俯,那它將保持為 undefined奶卓。
當一個函數(shù)在其主體中使用 this 關鍵字時,可以通過使用函數(shù)繼承自Function.prototype 的 call 或 apply 方法將 this 值綁定到調用中的特定對象撼玄。(如果傳遞給 this 的值不是一個對象夺姑,JavaScript 會嘗試使用內(nèi)部 ToObject 操作將其轉換為對象。) - bind方法
ES5 引入了 Function.prototype.bind互纯。調用f.bind(someObject)會創(chuàng)建一個與f具有相同函數(shù)體和作用域的函數(shù)瑟幕,在這個新函數(shù)中磕蒲,this將永久地被綁定到了bind的第一個參數(shù)留潦,無論此函數(shù)是如何被調用的。 - 箭頭函數(shù)
在箭頭函數(shù)中辣往,this與封閉詞法環(huán)境的this保持一致兔院。在全局代碼中,它將被設置為全局對象站削。 - 作為對象的方法
當函數(shù)作為對象里的方法被調用時坊萝,它們的 this 是調用該函數(shù)的對象。(此概念適用于原型鏈中的this和getter 與 setter 中的 this) - 作為構造函數(shù)
當一個函數(shù)用作構造函數(shù)時(使用new關鍵字),它的this被綁定到正在構造的新對象十偶。(手動返回其他對象時菩鲜,則綁定到返回的這個對象上) - 作為一個DOM事件處理函數(shù)
當函數(shù)被用作事件處理函數(shù)時,它的this指向觸發(fā)事件的元素(一些瀏覽器在使用非addEventListener的函數(shù)動態(tài)添加監(jiān)聽函數(shù)時不遵守這個約定)惦积。 - 作為一個內(nèi)聯(lián)事件處理函數(shù)
當代碼被內(nèi)聯(lián)on-event 處理函數(shù)調用時接校,它的this指向監(jiān)聽器所在的DOM元素。