咱們在聲明函數的時候一般是函數
var foo function(a){this
console.log(a) es5
};it
用ES6 咱們寫成了這樣io
var foo = a =>{console
console.log(a);function
};im
foo(2);co
只是少些了function字段哪些冗餘的東西嗎
首先看下下面的代碼:
var obj={
id:"LOVE"
love:functionLove(){
console.log(this.id);
}
};
var id = "HIT"
obj.love(); //LOVE
setTimeout(obj.love,100); // LOVE
都是LOVE ,沒什麼毛病吧,本應該是setTimeout(obj.love,100);輸入HIT
按照分析,love 函數丟失了同this 之間的綁定,應該是HIT this 應該是window 最經常使用的是var self = this;來處理下this:
var obj = { id: "not LOVE", love: function() { var self = this console.log(this.id); }};var id = "not HIT"obj.love()setTimeout(obj.love(), 1000);哦 傳說中的胖尖頭this綁定時的行爲和普通函數的行爲徹底不一致,難道是在es5 中解決了?沒有 ,在嚴格模式下,這些都不是問題,可是在非嚴格模式下是會輸出Hit的