首先知道一下什麼是箭頭函式,箭頭函式就是沒有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
,而這個環境的this
是obj
,這樣是不是就清晰明了了
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 ...