想了一下,大概有以下幾種情況吧:
不支援箭頭函式的環境
目前支援箭頭函式的環境畢竟還不多,僅 Safari、Chrome、Firefox 較新版本,Microsoft Edge、NodeJS 4.x、NodeJS 6.x 支援。IE 全系列都不支援。
在函數里面需要使用 this 變數的時候
箭頭函式中沒有自己的 this 變數,在箭頭函式內部呼叫的 this 實際上是函式作用域之外的 this,所以如果對 this 有呼叫需求,就不可以用箭頭函式,比如給 dom 繫結事件:
document.body.addEventListener( "click", function() {
this.setAttribute( "clicked", 1 ); // 這個 this 指向 document.body
}, false );
document.body.addEventListener( "click", () => {
console.log( this ); // this 指向 window
3. 在函數里面需要呼叫內部 arguments 的時候
箭頭函式沒有自己的 arguments 變數,所以如果函式內部要呼叫 arguments 變數,不可以使用箭頭函式。但是也可以透過一些其他方式解決,比如:
const foo = ( ...args ) => {
console.log( args ); // args 和 function 函式的 arguments 類似
};
想了一下,大概有以下幾種情況吧:
不支援箭頭函式的環境
目前支援箭頭函式的環境畢竟還不多,僅 Safari、Chrome、Firefox 較新版本,Microsoft Edge、NodeJS 4.x、NodeJS 6.x 支援。IE 全系列都不支援。
在函數里面需要使用 this 變數的時候
箭頭函式中沒有自己的 this 變數,在箭頭函式內部呼叫的 this 實際上是函式作用域之外的 this,所以如果對 this 有呼叫需求,就不可以用箭頭函式,比如給 dom 繫結事件:
document.body.addEventListener( "click", function() {
this.setAttribute( "clicked", 1 ); // 這個 this 指向 document.body
}, false );
document.body.addEventListener( "click", () => {
console.log( this ); // this 指向 window
}, false );
3. 在函數里面需要呼叫內部 arguments 的時候
箭頭函式沒有自己的 arguments 變數,所以如果函式內部要呼叫 arguments 變數,不可以使用箭頭函式。但是也可以透過一些其他方式解決,比如:
const foo = ( ...args ) => {
console.log( args ); // args 和 function 函式的 arguments 類似
};