javascript - 關於this的指向性問題
天蓬老师
天蓬老师 2017-06-28 09:25:33
0
5
765
var foo = "window";
var obj = {
    foo : "obj",
    getFoo : function(){
        return function(){
            return this.foo;
        };
    }
};
var f = obj.getFoo();
console.log(f());  //结果:window

為什麼上述程式碼的運行結果是window呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(5)
滿天的星座

obj.getFoo() 回傳一個方程,賦值給了 f 。
f 透過 f() 被調用,沒有明確的調用者,所以 this 就是 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()實際運行的地方,thiswindow,由於沒有通過call或者bind改變上下文,所以輸出的就是window

可以依照以下替換方法:

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'

淡淡烟草味

其實最簡單的理解就是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... 希望對你有幫助

Ty80

函數執行,函數體內的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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!