1、基本用法
在ES6中允許使用箭頭()=>來(lái)定義函數(shù)。
var f = v => v;
//等同于
var f = function(v) {
return v;
};
如果函數(shù)不需要參數(shù)或者需要多個(gè)參數(shù)就使用圓括號(hào)來(lái)代替。
var f = () => 5;
// 等同于
var f = function () { return 5 };
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
箭頭函數(shù)可以與解構(gòu)賦值同時(shí)使用。
const full = ({ first, last }) => first + ' ' + last;
// 等同于
function full(person) {
return person.first + ' ' + person.last;
}
箭頭函數(shù)可以簡(jiǎn)化函數(shù)代碼,尤其是回調(diào)函數(shù)的簡(jiǎn)化。
// 正常函數(shù)寫法
[1,2,3].map(function (x) {
return x * x;
});
// 箭頭函數(shù)寫法
[1,2,3].map(x => x * x);
2、使用時(shí)注意事項(xiàng)
1)函數(shù)中的this是定義函數(shù)時(shí)的this,而不是使用函數(shù)時(shí)的this,也就是說(shuō)箭頭函數(shù)中的this是固定的。
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
var id = 21;
foo.call({ id: 42 });
// id: 42
上面的例子中,使用了箭頭函數(shù),this指向foo而不是window。
根據(jù)這一特性我們可以用來(lái)封裝回調(diào)函數(shù)。
2)不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō),不可以使用new命令,否則會(huì)報(bào)錯(cuò)。由于箭頭函數(shù)沒(méi)有自己的this,所以當(dāng)然也就不能用call()、apply()、bind()這些方法去改變this的指向。
箭頭函數(shù)可以綁定this對(duì)象,大大減少了顯式綁定this對(duì)象的寫法(call、apply、bind)。但是,箭頭函數(shù)并不適用于所有場(chǎng)合,所以ES7提出了“函數(shù)綁定”(function bind)運(yùn)算符,用來(lái)取代call、apply、bind調(diào)用。雖然該語(yǔ)法還是ES7的一個(gè)提案,但是Babel轉(zhuǎn)碼器已經(jīng)支持。函數(shù)綁定運(yùn)算符是并排的兩個(gè)冒號(hào)(::),雙冒號(hào)左邊是一個(gè)對(duì)象,右邊是一個(gè)函數(shù)。該運(yùn)算符會(huì)自動(dòng)將左邊的對(duì)象,作為上下文環(huán)境(即this對(duì)象),綁定到右邊的函數(shù)上面。