鍍金池/ 問答/HTML/ 回調(diào)函數(shù)this

回調(diào)函數(shù)this

function fn2(a1,fn){
    this.a1 = a1;//這個this是指向的window還是它自身?
    fn3();
}
function fn3(){
    console.log(a1);
}
fn2(123);
回答
編輯回答
還吻

this 是 window。因為你的 fn2 調(diào)用是普通函數(shù)調(diào)用,沒有當做構造函數(shù)調(diào)用。當做構造函數(shù)調(diào)用需要用 new 關鍵字,代碼如下:

function fn2(a1,fn){
    this.a1 = a1;//這個this是指向的window還是它自身?
    console.log(this);
    fn3();
}
function fn3(){
    console.log(a1);
}
var b = new fn2(222, fn3);

這樣 this 就是 b 對象了。

2018年8月14日 23:28
編輯回答
念初

this指的是,調(diào)用函數(shù)的那個對象。

你函數(shù)調(diào)用的那個對象是window,也就是window.a1 = a1,執(zhí)行完函數(shù)后a1就是全局變量了

2018年3月22日 06:45
編輯回答
爛人

你函數(shù)里的this是window。我覺得有時候不要把這些想得復雜了,就看函數(shù)執(zhí)行有沒有人調(diào)用,沒有就window。

2017年4月30日 09:53
編輯回答
嘟尛嘴

在定義的時候this指向誰是不確定的,要看在執(zhí)行的時候是誰調(diào)用的你這個直接執(zhí)行就是默認的 為window

2017年6月3日 14:45
編輯回答
冷溫柔

如果是直接執(zhí)行的話,fn2是在window環(huán)境下執(zhí)行的,因此this指向的是window。

但是如果是new fn2(123),那么this指向的就是fn2自己,fn3執(zhí)行時就會報錯,提示a1沒有定義

2018年9月19日 11:13
編輯回答
墨小羽

看執(zhí)行環(huán)境
在對象中的方法,this會指向該對象。

但是this的值,可以通過.call() .apply() .bind()修改。

可以參考

https://developer.mozilla.org...

2017年4月3日 12:53
編輯回答
巴扎嘿

默認你的函數(shù)是在全局下聲明的,則函數(shù)fn2是由window調(diào)用的,所以this綁定的是window對象,如果你在函數(shù)fn3還有this,那么調(diào)用函數(shù)fn2時,fn3中的this就指向fn2,JS中this的綁定主要看誰調(diào)用了這個函數(shù)。JS中this綁定有四種情況(默認綁定,顯示綁定,隱式綁定,new綁定),我一開始也是一臉懵逼,看了《你不知道的JavaScript(上卷)》中this綁定的解釋之后清楚很多。題主可以參考一下看看

2017年10月4日 08:58