箭頭函式作為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 使...