初探ES6:箭頭函數(shù)

如需轉(zhuǎn)載請(qǐng)注明來源,喜歡的朋友們點(diǎn)個(gè)贊,蟹蟹~~~

如有錯(cuò)誤,請(qǐng)批評(píng)指正!

關(guān)鍵詞:()=>{},this

先看一個(gè)簡(jiǎn)單的例子:

()=>console.log(1)

//上述代碼與一下等同:
function(){
  return conosle.log(1)
}

箭頭函數(shù)語法:

(arg) => { //dosomething } 
//等同于:
function( arg ){
    //dosomething
}

當(dāng)然,不同情況有不同的變換:

  1. 只有一個(gè)參數(shù):
  a => { console.log(1) }
  //可以省略括號(hào),也可以不省略,后面的大括號(hào)稍后講解
  1. 至少2個(gè)參數(shù):
(a,b)=>{ //dosomething }
//在有至少2個(gè)參數(shù)的情況必須加括號(hào)~~
  1. 無參數(shù):
()=>{ //dosomething }
//無參數(shù)以一個(gè)括號(hào)來表示

現(xiàn)在來說一下后面代碼塊加大括號(hào)和不加:
首先:如果你的代碼多于一條語句以上,一定要用大括號(hào)來包裹。示范點(diǎn)擊
其次:如果你只有一條語句并且沒有使用大括號(hào),它會(huì)默認(rèn)return,而如果你加了大括號(hào)需要自己手動(dòng)return。

var b=0;
let f1 = ()=>b;
console.log(f1());// 打出0 
//-------
let f2 = ()=>{ ++b };
console.log(f2()) //打出undefined

示范點(diǎn)擊

接下里用一個(gè)更加詳細(xì)的范例(箭頭函數(shù)是寫回調(diào)函數(shù)的最好用法):

//現(xiàn)在我們來給數(shù)組排個(gè)序(用sort方法):
let arr = [ 3,1,10,6  ]
//一般我們是這樣寫的
arr.sort(function(a,b){
  return a-b
})
//現(xiàn)在我們用箭頭函數(shù)這樣寫:
arr.sort( (a,b)=> a-b )
console.log(arr)

示例點(diǎn)擊

補(bǔ)充:箭頭函數(shù)的立即執(zhí)行函數(shù)寫法:
  var a=0;
  (() => console.log(a))()
// 如果你想傳入?yún)?shù)可以在最后面的括號(hào)寫入 
//或者:
( ()=>{ console.log(a) } )(a)

示例點(diǎn)擊

接下來是一些使用的注意:

(1)函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。(所以如果你使用了箭頭函數(shù)就不允許使用call,apply,bind)
(2)不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
(3)不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用Rest參數(shù)代替。
(4)不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)。

這里說一下箭頭函數(shù)的this :

  • 首先,箭頭函數(shù)本身沒有this。
  • 其次,對(duì)象內(nèi)直接調(diào)用箭頭函數(shù)的this固定是在全局也就是window。
  • 但是,也有例外,比如你在一個(gè)函數(shù)里面調(diào)用箭頭函數(shù),箭頭函數(shù)的this指向的是父層函數(shù)的this

上代碼:

var age = 0;
  let obj = {
    age : 99,
    fn1 : ()=>{ console.log(this.age) },
    fn2 : function(){ console.log(this.age) }
  }
obj.fn1();//0,由于是在對(duì)象內(nèi)直接調(diào)用所以指向window,哪怕你在obj外面再加一個(gè)對(duì)象,指向也是window
obj.fn2();//99正常的打印

之后我們用一層函數(shù)包裹箭頭函數(shù)并調(diào)用它:

var age=0;
let obj = {
  age:99,
  fn1 : function(){
    let f = ()=>console.log(this.age);
  }
}
obj.fn1();//打印99,因?yàn)榧^函數(shù)f會(huì)找到fn1的this,而fn1的this是obj。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)l...
    呼呼哥閱讀 3,708評(píng)論 0 1
  • 1.函數(shù)參數(shù)的默認(rèn)值 (1).基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。
    趙然228閱讀 830評(píng)論 0 0
  • 第一章 塊級(jí)作用域綁定 let 和 const 都是不存在提升,聲明的都是塊級(jí)標(biāo)識(shí)符都禁止重聲明 每個(gè)const聲...
    NowhereToRun閱讀 1,674評(píng)論 0 2
  • 善良有啥用呢? 明明我才是受傷害最多的那個(gè),也是挺可笑的了。
    往前走啊不回頭閱讀 240評(píng)論 0 0
  • 到醫(yī)院咨詢了有關(guān)體檢的事情,就直接到學(xué)校準(zhǔn)備接你回家。到校門口的時(shí)候是下午四點(diǎn)半剛過,你們要五點(diǎn)二十放學(xué),這我知道...
    西泰閱讀 315評(píng)論 0 2

友情鏈接更多精彩內(nèi)容