ES6箭頭函數與普通函數的區(qū)別

ES6標準新增了一種新的函數:Arrow Function(箭頭函數)焰情。

為什么叫Arrow Function?因為它的定義用的就是一個箭頭:

//1剥懒、沒有形參的時候
let fun = () => console.log('我是箭頭函數'); 
fun();
//2内舟、只有一個形參的時候()可以省略
let fun2 = a => console.log(a); 
fun2('aaa');

//3、倆個及倆個以上的形參的時候
let fun3 = (x,y) =>console.log(x,y);  //函數體只包含一個表達式則省略return 默認返回
fun3(24,44);

//4初橘、倆個形參以及函數體多條語句表達式
let fun4 = (x,y) => {
  console.log(x,y);
  return x+y; //必須加return才有返回值
}
//5验游、如果要返回對象時需要用小括號包起來,因為大括號被占用解釋為代碼塊了保檐,正確寫法
let fun5 = ()=>({ foo: x })   //如果x => { foo: x }  //則語法出錯

那么箭頭函數有哪些特點耕蝉?

相比普通函數更簡潔的語法

箭頭函數

var a = ()=>{
return 1;
}

相當于普通函數

function a(){
  return 1;
}

沒有this

在箭頭函數出現之前,每個新定義的函數都有其自己的 this 值

var myObject = {
  value:1,
  getValue:function(){
    console.log(this.value)
  },
  double:function(){
    return function(){  //this指向double函數內不存在的value
      console.log(this.value = this.value * 2); 
    }
  }
}
/*希望value乘以2*/
myObject.double()();  //NaN
myObject.getValue();  //1

使用箭頭函數

var myObject = {
  value:1,
  getValue:function(){
    console.log(this.value)
  },
  double:function(){
    return ()=>{
      console.log(this.value = this.value * 2); 
    }
  }
}
/*希望value乘以2*/
myObject.double()();  //2
myObject.getValue();  //2

不能使用new

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

var B = ()=>{
  value:1;
}

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

不綁定arguments夜只,用rest參數...解決

/*常規(guī)函數使用arguments*/
function test1(a){
  console.log(arguments);   //1
}
/*箭頭函數不能使用arguments*/
var test2 = (a)=>{console.log(arguments)}  //ReferenceError: arguments is not defined
/*箭頭函數使用reset參數...解決*/
let test3=(...a)=>{console.log(a[1])} //22

test1(1);
test2(2);
test3(33,22,44);

使用call()和apply()調用

由于 this 已經在詞法層面完成了綁定垒在,通過 call() 或 apply() 方法調用一個函數時,只是傳入了參數而已扔亥,對 this 并沒有什么影響:

var obj = {
  value:1,
  add:function(a){
    var f = (v) => v + this.value; //a==v,3+1
    return f(a);
  },
  addThruCall:function(a){
    var f = (v) => v + this.value; //此this指向obj.value
    var b = {value:2};
    return f.call(b,a); //f函數并非指向b,只是傳入了a參數而已
    
  }
}
 
console.log(obj.add(3));    //4
console.log(obj.addThruCall(4));    //5

捕獲其所在上下文的 this 值场躯,作為自己的 this 值

var obj = {
  a: 10,
  b: function(){
    console.log(this.a); //10
  },
  c: function() {
     return ()=>{
           console.log(this.a); //10
     }
  }
}
obj.b(); 
obj.c()();

箭頭函數沒有原型屬性

var a = ()=>{
  return 1;
}

function b(){
  return 2;
}

console.log(a.prototype);//undefined
console.log(b.prototype);//object{...}

不能簡單返回對象字面量

如果要返回對象時需要用小括號包起來,因為大括號被占用解釋為代碼塊了旅挤,正確寫法

let fun5 = ()=>({ foo: x })   //如果x => { foo: x }  //則語法出錯

箭頭函數不能換行

let a = ()
          =>1; //SyntaxError: Unexpected token =>
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末踢关,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子粘茄,更是在濱河造成了極大的恐慌签舞,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柒瓣,死亡現場離奇詭異儒搭,居然都是意外死亡,警方通過查閱死者的電腦和手機芙贫,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門搂鲫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屹培,你說我怎么就攤上這事≌荩” “怎么了褪秀?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長薛训。 經常有香客問我媒吗,道長,這世上最難降的妖魔是什么乙埃? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任闸英,我火速辦了婚禮锯岖,結果婚禮上,老公的妹妹穿的比我還像新娘甫何。我一直安慰自己出吹,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布辙喂。 她就那樣靜靜地躺著捶牢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巍耗。 梳的紋絲不亂的頭發(fā)上秋麸,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音炬太,去河邊找鬼灸蟆。 笑死,一個胖子當著我的面吹牛亲族,可吹牛的內容都是我干的炒考。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼孽水,長吁一口氣:“原來是場噩夢啊……” “哼票腰!你這毒婦竟也來了?” 一聲冷哼從身側響起女气,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤杏慰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炼鞠,有當地人在樹林里發(fā)現了一具尸體缘滥,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年谒主,在試婚紗的時候發(fā)現自己被綠了朝扼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡霎肯,死狀恐怖擎颖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情观游,我是刑警寧澤搂捧,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站懂缕,受9級特大地震影響允跑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一聋丝、第九天 我趴在偏房一處隱蔽的房頂上張望索烹。 院中可真熱鬧,春花似錦弱睦、人聲如沸百姓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓣戚。三九已至,卻和暖如春焦读,著一層夾襖步出監(jiān)牢的瞬間子库,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工矗晃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仑嗅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓张症,卻偏偏與公主長得像仓技,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俗他,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容