ES5的函數與ES6的箭頭函數的區別

之前被人問過這樣一個問題,ES5的函數與ES6中的箭頭函數有哪些區別
當時想着這麼不是很簡單麼,ES6中的箭頭函數是擁有this綁定的,且箭頭函數的this綁定是尤其定義時的作用域決定的,且箭頭函數的寫法更精簡。其實這麼說也沒有問題,但是太膚淺了。

查看了阮一峯大神的es6網站,看到有如下描述
(1)函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。

	由於箭頭函數使得this從“動態”變成“靜態”,下面兩個場合不應該使用箭頭函數。
	第一個場合是定義函數的方法,且該方法內部包括this
	第二個場合是需要動態this的時候,也不應使用箭頭函數。

(2)不可以當作構造函數,也就是說,不可以使用new命令,否則會拋出一個錯誤。
至於爲什麼不可以使用new,我個人的理解是在構造函數的內部是沒有prototype這個屬性的,導致new調用不成功

(3)不可以使用arguments對象,該對象在函數體內不存在。如果要用,可以用 rest 參數代替。

(4)不可以使用yield命令,因此箭頭函數不能用作 Generator 函數。

以上爲箭頭函數與普通函數的區別,詳情可以看阮一峯大神的文章。

http://es6.ruanyifeng.com/#docs/function#箭頭函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章