箭頭和普通函數(shù)的區(qū)別是什么?
1.第一個(gè)區(qū)別就是寫(xiě)法上的區(qū)別?箭頭函數(shù)省略了聲明函數(shù)的關(guān)鍵字function?在函數(shù)和代碼塊之間用一個(gè)=>代替
2.箭頭函數(shù)中的this始終指向箭頭函數(shù)聲明時(shí)所在的對(duì)象
3.普通函數(shù)中的this指向調(diào)用函數(shù)的對(duì)象
例:
<script>
function?fn()?{
??????console.log(this)
????}
fn()(這種調(diào)用等同于window.fn(),省略了window,此時(shí)函數(shù)this指向window)
?let?obj?=?{
??????name:?'zhangsan',
??????fun()?{
????????console.log(this)
??????}
????}
????obj.fun()(函數(shù)被obj調(diào)用,所以此是this指向obj實(shí)例對(duì)象)
??var?fn?=?()?=>?{
??????console.log(this)
????}
? ? fn()(箭頭函數(shù)中的this指向始終指向箭頭函數(shù)聲明時(shí)所在的對(duì)象,函數(shù)在window中聲明,所以this指向window)
</script>
箭頭函數(shù)的寫(xiě)法都有哪些?
第一種寫(xiě)法?當(dāng)箭頭函數(shù)只接受一個(gè)參數(shù)?并且返回值是這個(gè)參數(shù)的時(shí)候,當(dāng)箭頭函數(shù)有且僅有一個(gè)參數(shù)時(shí)可以省略()?
let?fn?=?a?=>?a
????//?上面的箭頭函數(shù)等價(jià)于下面的這種寫(xiě)法
????let?fn?=?function(a)?{
??????return?a
????}
第二種寫(xiě)法?當(dāng)箭頭函數(shù)只接受一個(gè)參數(shù)?并且返回的是一個(gè)簡(jiǎn)單的邏輯的時(shí)候
let?fn?=?a?=>?a+1
?//?上面的箭頭函數(shù)等價(jià)于下面的這種寫(xiě)法
????let?fu?=?function(a)?{
??????return?a?+?1
????}
? ?第三種寫(xiě)法是當(dāng)箭頭函數(shù)接受多個(gè)數(shù)據(jù)?并且返回一個(gè)簡(jiǎn)單的邏輯的時(shí)候
?let?fn?=?(a,?b,?c)?=>?a?+?b?+?c?
?//?上面的箭頭函數(shù)等價(jià)于下面的這種寫(xiě)法
????let?fn?=?function(a,?b,?c)?{
??????return?a?+?b?+?c
????}
箭頭函數(shù)的第四種寫(xiě)法?如果使用箭頭函數(shù)只是想單純的返回一個(gè)對(duì)象?則需要給對(duì)象添加()
let?fn?=?()?=>?({name:?'zhangsan',?age:?15})
箭頭的函數(shù)的第五種寫(xiě)法
?let?fn?=?(a,?b,?c)?=>?{
??????console.log(a?+?b?+?c)
????}
????fn(1,?2,?3)