this:會指向當時執行環境;取決於被誰(什麼時候)呼叫,而不是被誰(在哪)定義。
在執行環境初期時會先創建Global Object window物件與 this變數,this會指向window,所以在全域執行環境中window 會等同於 this。
只要在function 裡面的this 都是指向window,無論function位於哪一層(function 執行算是全域執行環境)。
在物件中 this 會指向物件本身(物件執行環境),但物件中的function 中如果還有function 會指向window(function 執行算是全域執行環境)。
嚴格模式底下就都是
undefined
非嚴格模式,瀏覽器底下是
window
非嚴格模式,node.js 底下是
global
obj.foo()
是通過obj
找到foo
,所以就是在物件環境執行。
var foo = obj.foo
,變數foo
就直接指向函數本身(變數foo存放的是obj.foo的位址 ),所以對foo()
而言就變成在全域環境執行(呼叫一般function)。
f()
直接呼叫function 全域執行環境。
obj.f()
物件中f
指向 f()
,然後透過物件執行,所以是物件執行環境。