箭頭函式和普通函式的區別

2021-10-25 19:00:35 字數 1446 閱讀 6508

1.箭頭函式相當於匿名函式,是不能作為建構函式的,不能使用new

varb=

()=>

var b =

newb()

;//uncaught typeerror: b is not a constructor

2.箭頭函式不繫結arguments,取而代之用rest引數…解決

function

a(a)

varb

=(b)

=>

varc=(

...c)

=>a(

2);b

(2);

c(2)

;

3.箭頭函式會捕獲其所在上下文的this值,作為自己的this值。即箭頭函式的作用域會繼承自外圍的作用域。外層沒有普通函式this會指向全域性物件

var obj =

c:function()

}}obj.b(

);obj.c(

)();

4.箭頭函式當方法使用的時候沒有定義this的繫結

箭頭函式在定義之後,this的值就不會發生改變,無論用什麼方式呼叫它,this的值都不會發生改變。

其原因在於:箭頭函式不會自動繫結區域性變數,如this,arguments,super(es6),new.target(es6)等。所以箭頭函式沒有它自己的this的值,箭頭函式內的this的值繼承自外圍作用域。在箭頭函式中呼叫this時,僅僅是簡單的沿著作用域鏈向上尋找,找到最近乙個this的值拿來使用。

const button = document.

getelementbyid

('mybutton');

button.

addeventlistener

('click',(

)=>

);

var obj =

;return f.

call

(c,n);}

}console.

log(obj.b(

1));

//11

6.箭頭函式沒有原型函式

vara=

()=>

functionb(

)console.

log(a.prototype)

;//undefined;

console.

log(b.prototype)

;//object

7.箭頭函式不能當做generator函式,不能使用yield關鍵字

8.箭頭函式不能換行

vara=

()=>1;

//syntaxerror:unexpected token

箭頭函式和普通函式的區別

面試時被問到箭頭函式和普通函式的區別。借用別人的乙個栗子 function make var testfunc make.call testfunc testfunc.call object object可以看到箭頭函式在定義之後,this 就不會發生改變了,無論用什麼樣的方式呼叫它,this 都不...

普通函式和箭頭函式的區別

箭頭函式 let fun 普通函式 function fun 箭頭函式相當於匿名函式,並且簡化了函式定義。箭頭函式有兩種格式,一種只包含乙個表示式,連和return都省略掉了。還有一種可以包含多條語句,這時候就不能省略和return。1 箭頭函式是匿名函式,不能作為建構函式,不能使用new let ...

普通函式和箭頭函式的區別

一 箭頭函式全是匿名函式,普通函式也可以有匿名函式,也可以有具名函式。function a let a function let a 二 箭頭函式不能用於建構函式,不能使用new。三 箭頭函式不繫結this,會捕捉其所在上下文的this指,會作為自己的this值,沒有辦法改變其指向 var obj ...