function funcName(params) { return params + 2; } funcName(2); // 4函數使用箭頭函數可以使用僅僅一行程式碼搞定!
var funcName = (params) => params + 2 funcName(2); // 4是不是很酷!雖然是一個極端簡潔的例子,但很好的表達了箭頭函數在寫程式碼時的優勢。我們來深入了解箭頭函數的語法:
() => { statements }如果只有一個參數,可以省略括號:
parameters => { statements }如果傳回值隻隻有一個表達式(expression), 也可以省略大括號:
parameters => expression // 等价于: function (parameters){ return expression; }現在你已經學會了箭頭函數的語法,我們來實戰一下。開啟Chrome瀏覽器開發者控制台,輸入:
var double = num => num * 2我們將變數double綁定到一個箭頭函數,該函數有一個參數num, 傳回 num * 2。 呼叫函數:
double(2); // 4 double(3); // 6沒有局部this的綁定
function Counter() { this.num = 0; } var a = new Counter();
console.log(a.num); // 0
function Counter() { this.num = 0; this.timer = setInterval(function add() { this.num++; console.log(this.num); }, 1000); }
var b = new Counter(); // NaN // NaN // NaN // ..你會發現,每隔一秒都會有一個NaN列印出來,而不是累加的數字。到底哪裡錯了呢?
clearInterval(b.timer);我們來試著理解為什麼出錯:根據上一篇部落格講解的規則,首先函數setInterval沒有被某個宣告的對象調用,也沒有使用new關鍵字,再之沒有使用bind, call和apply。 setInterval只是一個普通的函數。實際上setInterval裡面的this綁定到全域物件的。我們可以透過將this列印出來驗證這一點:
function Counter() { this.num = 0; this.timer = setInterval(function add() { console.log(this); }, 1000); } var b = new Counter();你會發現,整個window物件被印出來。 使用以下指令停止列印:
clearInterval(b.timer);
function Counter() { this.num = 0; this.timer = setInterval(() => { this.num++; console.log(this.num); }, 1000); } var b = new Counter(); // 1 // 2 // 3 // ...透過Counter建構函數綁定的this將會被保留。在setInterval函數中,this仍指向我們新建立的b物件。
function Counter() { var that = this; this.timer = setInterval(() => { console.log(this === that); }, 1000); } var b = new Counter(); // true // true // ...
clearInterval(b.timer);
箭頭函數寫程式具有更簡潔的語法;
不會綁定this。
以上是JavaScript箭頭函數的用法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!