用一句話概括:
箭頭函數(shù)中的this指向的是定義時的this,而不是執(zhí)行時的this
示例:
var obj={
name:"nicolas",
say(){
setTimeout(
function(){
console.log(this.name);
},500);
}
};
obj.say();//undefined
出現(xiàn)上述現(xiàn)象是因為,執(zhí)行到setTimeout的時候this已經(jīng)變成了window對象,(setTimeout是window對象的方法),已經(jīng)不再還obj對象了,所以此處this.name獲取的不是obj.name的值而是window.name的值,而window上沒有定義屬性name,所以得到的結(jié)果及時undefined
var obj={
name:"nicolas",
say(){
setTimeout(
//不同處:箭頭函數(shù)
()=>{
console.log(this.name);
},500);
}
};
obj.say();//nicoles
以上兩端代碼不同處就是setTimeout中,原本的匿名函數(shù)用箭頭函數(shù)代替了,此外,用箭頭函數(shù)編寫的這段代碼,成功地打印出了我們想要的結(jié)果:nicolas.