1. 程式人生 > >箭頭函式和普通函式有什麼區別

箭頭函式和普通函式有什麼區別

  • 1.箭頭函式相當於匿名函式,是不能作為建構函式的,不能使用new
  • 2.箭頭函式不繫結arguments,取而代之用rest引數…解決
  • 3.箭頭函式會捕獲其所在上下文的this值,作為自己的this值。即箭頭函式的作用域會繼承自外圍的作用域。
  • 4.箭頭函式當方法使用的時候沒有定義this的繫結
obj = {
  a:10,
  b:()=>{
    console.log(this.a);//undefined
    console.log(this);//window
  },
  c:function(){
    return ()=>{
      console.log(this.a);//10
    }
  }
}
obj.b();
obj.c();

b箭頭函式執行時的外圍環境是全域性作用域,this指向了window 
c內部返回的箭頭函式執行在c函式內部,其外圍的作用域是外部函式的作用域,外部函式的this值指向呼叫它的obj,所以輸出的值是10

  • 5.使用call()和apply()呼叫 

通過call()或者apply()呼叫一個函式時,只是傳入引數而已,對this並沒有影響。

var obj = {
  a:10,
  b:function(n){
   var f = (v) => v + this.a;
   var c = {a:20};
   return f.call(c,n);
 }
}
console.log(obj.b(1));//11
  • 6.箭頭函式沒有函式原型
var a = ()=>{
  return 1;
}
function b(){
  return 2;
}
console.log(a.prototype);//undefined;
console.log(b.prototype);//object{...}

 

  • 7.箭頭函式不能當做Generator函式,不能使用yield關鍵字 
  • 8.箭頭函式不能換行
var a = () 
          => 1;//SyntaxError:Unexpected token