淺淺的分析下es6箭頭函式

2022-09-02 14:33:11 字數 2634 閱讀 2000

箭頭函式作為es6重點的語法內容之一,很多開發者對其愛不釋手,當也要注意其可能存在的問題,其正確的使用場景,否則會引起不必要的bug。

//場景1 沒有引數,空的小括號,返回值不用加 return,也就是說支援單一表示式,如果加return 需要構成語句

vardemo

=()=>

5675

;//場景2 :只有乙個引數 ,小括號省略

vardemo

=num1

=>

5675

;//場景3:有多個引數

vardemo

=(num1

,num2

)=>

5675

;//場景 4 :有多個引數 ,並且需要語句塊

vardemo

=(num1

,num2

)=>

else

}//場景5 :需要返回的為物件時需要兩隊花括號來區分物件以及本身的語句塊

vardemo

=()=}

箭頭函式不會建立自己的this;它使用封閉執行上下文的this值。

以下邏輯參考《你不知道的js》,請根據自己的需要進行選擇是否使用箭頭函式。

簡單的理解上面的邏輯圖大概就是這樣的幾個前提:

1 確定引數是固定的,沒有預設值,沒有rest引數收集器,如果有的話 ,也可以用一對小括號來歸納,對於整個團隊你的引數是明顯可知可控的。

2 簡單的流式邏輯圖,沒有過多的邏輯或者業務判斷

3 方法體比較簡單,只是單個或者簡單的表達語句

4 返回值是比較簡單的基本資料型別,如果是物件需要額外的大括號,其他的返回內容也是額外注意的,無論哪種請保證你的返回值是明確的、可讀的。

一般情況下如果想定義物件下的函式,是多少涉及使用物件中的其他屬性的,如果用箭頭函式會因為物件無法形成作用域,沒有相關上下文,導致this指向全域性。特別需要說明的一點是,如果你物件屬性方法中需要定義方法,同時想使用物件屬性,那麼此時建議使用箭頭函式。**參考如下:

let

person

=,say2

:function

(),say3

:function

()},

say4

:function()}

}person

.say1

()//全域性

person

.say2

()//物件

person

.say3

()()

//物件

person

.say4

()()

//全域性

function

animal

()animal

.prototype

.run

=()=>

animal

.prototype

.run2

=function

()var

dog=

newanimal

();dog

.run

()//codepen

dog.

run2

()//animal

此時用this喚起的是全域性物件,而用傳統方式是獲取到的事件元素。

var

btn=

document

.getelementbyid

("btn"

),btn2

=document

.getelementbyid

("btn2"

);btn

.addeventlistener

("click"

,function

())btn2

.addeventlistener

("click"

,()=>)

因為箭頭函式無法形成作用域,所以在例項化的時候構造器會失敗,不能使用箭頭函式實現構造器,真實的使用會報錯。

let

bird

=()=>

letxique

=new

bird

()//bird is not a constructor

這時候邏輯過於複雜使用箭頭函式會導致**結構不清楚,建議使用原始的結構。

比如以下場景:

1 業務或者語法判斷過於複雜

2 返回值情況很複雜

儘管箭頭函式和let、const以及一些es6語法變得風行,甚至於有些人覺得用箭頭函式就覺得自己的技術高階了,其實不然,大多人人還是停留在了它寫法上的便利,並沒有了解好其真正的使用場景。

總之,個人的建議是:上面提到的幾種不適合的場景不要用箭頭函式。箭頭函式適用於那些引數業務邏輯以及返回值都簡單的方法的實現。它本質我個人認為就是一段函式的簡化寫法,最大的利好在於傳遞了當前物件,避免了之前很多類似於var that=this ,self = this的寫法。

【領取方法】

es6箭頭函式

本例是在了解es6知識後在原來定義函式的基礎上進行理解var searchvalue 查詢匹配物件 var button var input var select button if searchvalue.input undefined button.click else 重新整理 tableli...

es6 箭頭函式

1.單引數 function cheng a 3 let cheng a 3 a a console.log cheng 9 2.多引數 function add a,b let add a,b a b 預設返回值 console.log add 3,9 3.無返回值 function add a,...

ES6 箭頭函式

es6 中,箭頭函式就是函式的一種簡寫形式,使用括號包裹數,跟隨乙個 緊接著是函式體 var getprice function 箭頭函式 var getprice 9.15 箭頭函式不僅僅是讓 變得簡潔,函式中 this 總是繫結總shi 指向物件自身 function person 1000 使...