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

2021-10-05 02:12:51 字數 1794 閱讀 3210

首先知道一下什麼是箭頭函式,箭頭函式就是沒有function關鍵字,而是乙個類似箭頭的函式:

var a = ()=>
相當於

es6新特性有哪些?

function a()
那麼就來看一下他們的區別

箭頭函式作為匿名函式,是不能作為建構函式的,不能使用new

var b = ()=>

var b = new b(); //typeerror: b is not a constructor

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

function a(a)

}var b = (b)=>

var c = (...c)=>

a(1);

b(2);

c(3);

箭頭函式會捕獲其所在上下文的 this 值,作為自己的 this 值

var obj = ,

c: function()

}}obj.b();

obj.c()();

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

這句話是mdn裡面寫的,但是我覺得這條和上條其實是一條,還是捕獲所在的上下文,比如下面這個例子:b是乙個箭頭函式,然後它的this是指向window,這是為什麼呢,因為箭頭函式捕獲的是obj{}這個物件的環境,然後這個環境的this指向的是window,就相當於上一條的例子:在c方法裡面return的那個箭頭函式捕獲的是c:function(){}這個環境的this,而這個環境的thisobj,這樣是不是就清晰明了了

var obj = ,

c: function()

}}obj.b();

obj.c();

var obj = ,

c: function(n) ;

return f.call(m,n);

}}console.log(obj.b(1)); //11

console.log(obj.c(1)); //11

箭頭函式沒有原型屬性

var a = ()=>

function b()

console.log(a.prototype);//undefined

console.log(b.prototype);//object

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

箭頭函式不能換行

var a = ()

=>1; //syntaxerror: unexpected token =>

對於函式的this指向問題,我總結了下面兩句話:

普通函式的this指向呼叫它的那個物件

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

面試時被問到箭頭函式和普通函式的區別。借用別人的乙個栗子 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 ...