ES6學習歷程 14 — 箭頭函示

ES6 Arrow functions

Megan
Learn & Record
5 min readApr 7, 2021

--

Photo by Carl Heyerdahl on Unsplash

ES6為函式表達式提供更方便簡潔的書寫方式,就是使用「箭頭」(=>)定義函式。

來看個範例:

多個參數

如果箭頭函式有兩個或以上的參數,就要使用下面的書寫方式:

上述也等同於這樣寫:

使用範例:

上述範例可以用箭頭函式這樣寫,如下:

不允許在定義參數和箭頭間換行

但是,如果在箭頭後換行就沒有問題:

這樣也沒有問題:

箭頭函式與物件語法

某函式回傳物件,JS使用方法是這樣:

如果換成箭頭函式的話:

箭頭函式與this

在JS中,的函式會定義自己的this。看範例:

在setTimeOut() 中的this.speed 為 undefined。這是因為,在setTimeOut() 的匿名函式中的this是setTimeOut()自己定義的this,跟speedUp() 定義的this不是同一個。

如果用箭頭函式的話,就沒有這個問題:

請問下面的範例中有幾個this呢?

上面的範例中,只有一個this,就是函式foo的this,所以t1、t2、t3都輸出同樣的結果。因為所有內層函式都是箭頭函式,都沒有自己的this,他們的this都是最外層的foo函式的this。

除了this,以下三個變數在箭頭函式中也是不存在的,都指向最外層的變數:arguments、super、new.target。

上面範例中,箭頭函式內部的變數arguments,其實是foo的arguments變數。

另外,由於箭頭函式沒有自己的this,所以也就不能使用call()、apply()、bind()這些方法來改變this的指向。

在上數程式碼中,箭頭函示没有自己的this,所以bind方法無效,内部的this指向外部的this。

--

--