箭頭函數(shù)的this

哪些情況不能使用this
少年离福,不要濫用箭頭函數(shù)啊

箭頭函數(shù)的this是根據(jù)外層(函數(shù)或者全局)作用域來決定this年鸳,箭頭函數(shù)會捕捉調(diào)用父函數(shù)時候父函數(shù)的this

//eg1
var x = 10;
var demo2 = {
    x : 1,
    test1 : () => { console.log(this.x); },
};
demo2.test1();  // 10

上面代碼的結(jié)果為什么是10妖枚,test1不是在demo2這個對象內(nèi)嗎运提?所以不應該this就指向demo2了嗎鳍寂?以上代碼中改含,箭頭函數(shù)中的this并不是指向aa這個對象。對象aa并不能構(gòu)成一個作用域迄汛,所以再往上到達全局作用域捍壤,this就指向全局作用域。因為test1沒有父函數(shù)鞍爱,直接就是全局作用域鹃觉。所以這里的this指向window。

//eg2
var id = '888'
var handler = {
  id: '123456',
  init: function() {
     (()=>{
        console.log(this.id)
     })()// 讓箭頭函數(shù)自執(zhí)行
  },
  init1: function() {
     (function(){
      (()=>{console.log(this.id)})()
     })()  // 匿名函數(shù)自執(zhí)行的內(nèi)部是箭頭函數(shù)的自執(zhí)行
  },
  };
handler.init()//123456
var aa = handler.init
aa() // 888
handler.init1()//888

eg2的話init創(chuàng)建了一個作用域睹逃。箭頭函數(shù)會捕捉調(diào)用init時候init內(nèi)的this盗扇。handler.init調(diào)用時候init內(nèi)的this指向handler對象祷肯。var aa = handler.init; aa()這樣子的話調(diào)用init是window。所以值是888疗隶。handler.init1()的值為什么是888呢佑笋?因為init1內(nèi)部是個匿名函數(shù)自執(zhí)行。自執(zhí)行內(nèi)部才是箭頭函數(shù)斑鼻。所以這樣子看來蒋纬,箭頭函數(shù)的外部是個匿名函數(shù)自執(zhí)行,而自執(zhí)行函數(shù)的this指向window。所以init1的值為888

  1. 箭頭函數(shù)適合于無復雜邏輯或者無副作用的純函數(shù)場景下坚弱,例如用在map蜀备、reduce、filter的回調(diào)函數(shù)定義中荒叶;
  2. 不要在最外層定義箭頭函數(shù)碾阁,因為在函數(shù)內(nèi)部操作this會很容易污染全局作用域。最起碼在箭頭函數(shù)外部包一層普通函數(shù)停撞,將this控制在可見的范圍內(nèi);

箭頭函數(shù)的this

1
 $("#desktop a img").each(function(index){
            alert($(this));
            alert(this);
 }   //這里的this就是 $("#desktop a img").   誰調(diào)用就是誰  jquery庫把this進行了包裝
2
$(".myMenuItem").mouseover( () => {
    console.log("$(this)",$(this)) 
} //這里的$(this)也是jquery對象但是指向整個react 悼瓮,取決于箭頭函數(shù)在哪兒定義戈毒,而非箭頭函數(shù)執(zhí)行的上下文環(huán)境。這里相當于也是回調(diào)横堡。箭頭函數(shù)本身是沒有this的所以就向上找一層

匿名函數(shù)自執(zhí)行埋市,setTimeout等中的this指向全局

JavaScript 環(huán)境中內(nèi)置的 setTimeout() 函數(shù)實現(xiàn)和下面的偽代碼類似:
function setTimeout(fn,delay) { // 等待 delay 毫秒
  fn(); // <-- 調(diào)用位置! 這里就是單純的函數(shù)調(diào)用,所以指向全局
}
function Bue() {
    (function() {
        debugger;
        console.log('this', this.init)   所以這里的this是window this.init為undefined命贴。并不是你所想象的this指向app實例道宅。
    })()
}
Bue.prototype.init = 'wo'
var app = new Bue()
function Bue() {
    console.log('this', this.init) //這里的this指向app。所以可以在Bue中直接使用Bue.prototype上的屬性
}
Bue.prototype.init = 'wo'
var app = new Bue() // new的時候會把Bue的上下文換成app實例的執(zhí)行一遍胸蛛。所以new Bue()時候可以執(zhí)行console.log

forEach 中的this

function hh () {
  [].slice.call(node.childNodes).forEach(_compileNode, this); // 需要傳遞this
}

若想._compileNode函數(shù)中的this和函數(shù)hh的this指向一致污茵,就需要手動給forEach傳第二個參數(shù)this。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葬项,一起剝皮案震驚了整個濱河市泞当,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌民珍,老刑警劉巖襟士,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嚷量,居然都是意外死亡陋桂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門蝶溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜历,“玉大人,你說我怎么就攤上這事〗胀眩” “怎么了落包?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長摊唇。 經(jīng)常有香客問我咐蝇,道長,這世上最難降的妖魔是什么巷查? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任有序,我火速辦了婚禮,結(jié)果婚禮上岛请,老公的妹妹穿的比我還像新娘旭寿。我一直安慰自己,他們只是感情好崇败,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布盅称。 她就那樣靜靜地躺著,像睡著了一般后室。 火紅的嫁衣襯著肌膚如雪缩膝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天岸霹,我揣著相機與錄音疾层,去河邊找鬼。 笑死贡避,一個胖子當著我的面吹牛痛黎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刮吧,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼湖饱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杀捻?” 一聲冷哼從身側(cè)響起琉历,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎水醋,沒想到半個月后旗笔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡拄踪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年蝇恶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶桐。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡撮弧,死狀恐怖潘懊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贿衍,我是刑警寧澤授舟,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站贸辈,受9級特大地震影響释树,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擎淤,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一奢啥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘴拢,春花似錦桩盲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孝冒,卻和暖如春柬姚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迈倍。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工伤靠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捣域,地道東北人啼染。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像焕梅,于是被迫代替她去往敵國和親迹鹅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容