箭頭(arrow)函數是ES6引入的一個新的語法特性,它可以讓我們書寫更簡潔,更易讀的函數,對于一些簡單的函數,使用箭頭函數可以更加方便快捷。
箭頭函數的語法如下:
const func = (param1, param2, …, paramN) =>{ statements }
箭頭函數的語法可以看到,使用"="等號和"="后的">"符號,箭頭函數的函數體寫在"{"和"}"號之間,與大家平常所寫的函數語法有些區別。
箭頭函數的優勢可以通過對比傳統函數的寫法來更好地理解。
傳統函數:
function add(a, b){ return a + b; }
箭頭函數:
const add = (a, b) =>a + b;
箭頭函數在短小精悍的函數上,表現出明顯的優勢。
箭頭函數還有一個特別好的地方。就是它縮小了this的范圍。在代碼中很常遇到需要取到外層this指針的情況。以前的寫法,則需要通過備份this的方式,像這樣:
const that = this; // 保存外層this指針 document.addEventListener('click', function() { that.handleClick(); }, false);
而在箭頭函數的寫法下,就很方便了:
document.addEventListener('click', () =>{ this.handleClick() }, false);
箭頭函數會捕獲所在(定義)作用域下的this值,這使得箭頭函數的this總是與封閉詞法環境的this保持一致。
然而,箭頭函數也有自己的缺點。比如箭頭函數沒有自己的this或arguments(它們獲取自己的閉合詞法作用域),不能用作構造函數,當需要動態構建函數時(例如每次批量生成),箭頭函數會表現出弱勢。
總之,箭頭函數是ES6引入的一個非常有用的新特性,它讓JavaScript的函數更具有可讀性、簡潔性和易用性。