var foo = "window"; var obj = { foo : "obj", getFoo : function(){ return function(){ return this.foo; }; } }; var f = obj.getFoo(); console.log(f()); //结果:window
為什麼上述程式碼的運行結果是window呢?
欢迎选择我的课程,让我们一起见证您的进步~~
obj.getFoo() 回傳一個方程,賦值給了 f 。 f 透過 f() 被調用,沒有明確的調用者,所以 this 就是 window 。
obj.getFoo()
f()
window
想要的到 "obj" ,可以這樣做
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ var self = this; return function(){ return self.foo; }; } }; var f = obj.getFoo(); console.log(f());
因為,在f()實際運行的地方,this是window,由於沒有通過call或者bind改變上下文,所以輸出的就是window。
this
call
bind
可以依照以下替換方法:
console.log(f()); // -----> console.log(obj.getFoo()); // -----> console.log(function() { var self = this; return function() { return self.foo } });
這裡的self就是指向window了,所以return self.foo就是return window.foo,也就是'window'。
self
return self.foo
return window.foo
'window'
其實最簡單的理解就是obj.getFoo給了f,然後再看這方法運行的位置在哪.
f = function () { return function () { return this.foo } }
console.log(f())中f()是獨立被呼叫的 1.如果呼叫者函數,被某一個物件所擁有,那麼該函數在呼叫時,內部的this指向該物件。 2.如果函數獨立調用,那麼該函數內部的this,則指向undefined。 推薦閱讀 http://www.jianshu.com/p/d647... 希望對你有幫助
函數執行,函數體內的this指向函數的呼叫方
1、下面這段程式碼,getFoo函數的呼叫方是obj,所以getFoo函數內部的this指向obj物件
var f = obj.getFoo()
2、getFoo函數回傳了一個匿名函數賦給變數f,再執行函數f,此時變數f是掛載到window上的,函數f的呼叫方是window,函數f內部的this也指向window
console.log(f()); //结果:window
obj.getFoo()
回傳一個方程,賦值給了 f 。f 透過
f()
被調用,沒有明確的調用者,所以 this 就是window
。想要的到 "obj" ,可以這樣做
因為,在
f()
實際運行的地方,this
是window
,由於沒有通過call
或者bind
改變上下文,所以輸出的就是window
。可以依照以下替換方法:
這裡的
self
就是指向window
了,所以return self.foo
就是return window.foo
,也就是'window'
。其實最簡單的理解就是obj.getFoo給了f,然後再看這方法運行的位置在哪.
console.log(f())中f()是獨立被呼叫的
1.如果呼叫者函數,被某一個物件所擁有,那麼該函數在呼叫時,內部的this指向該物件。
2.如果函數獨立調用,那麼該函數內部的this,則指向undefined。
推薦閱讀 http://www.jianshu.com/p/d647... 希望對你有幫助
函數執行,函數體內的this指向函數的呼叫方
1、下面這段程式碼,getFoo函數的呼叫方是obj,所以getFoo函數內部的this指向obj物件
2、getFoo函數回傳了一個匿名函數賦給變數f,再執行函數f,此時變數f是掛載到window上的,函數f的呼叫方是window,函數f內部的this也指向window