国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

ES6 箭頭函數(shù) 從了解到深入

Eminjannn / 2883人閱讀

摘要:有傳聞?wù)f,箭頭函數(shù)的語(yǔ)法,是受到了的影響,并且它與中的語(yǔ)法一樣,共享上下文。箭頭函數(shù)是新增加的一個(gè)特性。箭頭函數(shù)沒(méi)有自己的值,其值是通過(guò)繼承其它傳入對(duì)象而獲得的通常來(lái)說(shuō)是上一級(jí)外部函數(shù)的的指向。

箭頭函數(shù) 1. 簡(jiǎn)單的定義:

胖箭頭函數(shù) Fat arrow functions,又稱(chēng)箭頭函數(shù),是一個(gè)來(lái)自ECMAScript 2015(又稱(chēng)ES6)的全
新特性。有傳聞?wù)f,箭頭函數(shù)的語(yǔ)法=>,是受到了CoffeeScript 的影響,并且它與CoffeeScript中的
=>語(yǔ)法一樣,共享this上下文。

箭頭函數(shù)的產(chǎn)生,主要由兩個(gè)目的:更簡(jiǎn)潔的語(yǔ)法和與父作用域共享關(guān)鍵字this。接下來(lái),讓我們來(lái)看幾個(gè)詳細(xì)的例子
當(dāng)需要編寫(xiě)一個(gè)簡(jiǎn)單的單一參數(shù)函數(shù)時(shí),可以采用箭頭函數(shù)來(lái)書(shū)寫(xiě),標(biāo)識(shí)名 => 表達(dá)式。
這樣就可以省卻 functionreturn 的輸入,還有括號(hào),分號(hào)等。箭頭函數(shù)是ES6
增加的一個(gè)特性。

let f = v => v;

最直接的感覺(jué)就是簡(jiǎn)便,當(dāng)然不可能就是這么一點(diǎn)好處,下面就一起來(lái)探討一下。

幾個(gè)小細(xì)節(jié) :

如果箭頭函數(shù)的代碼塊多余一條語(yǔ)句,就必須要使用大括號(hào)將其括起來(lái),并且使用
return 語(yǔ)句返回。

由于大括號(hào)會(huì)被解釋位為代碼塊,所以如果箭頭函數(shù)直接返回一個(gè)對(duì)象,必須在外
面加上括號(hào)。

  let f = id => ({age: 22, name: Alice })

箭頭函數(shù)還可以和解構(gòu)賦值 Destructuring 聯(lián)合使用.

  const f = ({first, last}) => first + "" + last;

可以簡(jiǎn)化回調(diào)函數(shù),大大簡(jiǎn)化和縮短代碼行數(shù)。

2. 箭頭函數(shù)和普通函數(shù)的區(qū)別

this的指向
普通函數(shù)與箭頭函數(shù)有個(gè)微小的不同點(diǎn)。 箭頭函數(shù)沒(méi)有自己的this值 ,其this值是通

過(guò)繼承其它傳入對(duì)象而獲得的,通常來(lái)說(shuō)是上一級(jí)外部函數(shù)的 this 的指向。

  function f() {
    setTimeout( () => {
      console.log("id:", this.id);
    },100);
  }

  f.call( { id: 42 }); //id: 42;

這個(gè)例子中, setTimeout 的參數(shù)是一個(gè)箭頭函數(shù), 每隔100毫秒運(yùn)行一次,如果是普通函
數(shù),執(zhí)行的 this 應(yīng)該指向全局對(duì)象, 但是箭頭函數(shù)會(huì)讓 this 總是指向函數(shù)所在的對(duì)象

箭頭函數(shù)里面嵌套箭頭函數(shù)會(huì)有多少個(gè)this呢?
看一個(gè)簡(jiǎn)單的例子

  function f() {
    return () => {
      return () => {
        return () => {
          console.log("id:", this.id);
        };
      };
    };
  }
  f().call( {id: 42})()()(); //id: 42

上面的代碼中只有一個(gè) this, 就是函數(shù)f的this 。這是因?yàn)樗械膬?nèi)層函數(shù)都是箭頭函數(shù)
都沒(méi)有自己的this,都是最外層f函數(shù)的this。
注意:還有三個(gè)變量在箭頭函數(shù)中也是不存在的arguments , super, new.target所以順理成
章,箭頭函數(shù)也就不能再用這些方法call(),apply(),bind(),因?yàn)檫@是一些改變this指向的方法,
箭頭函數(shù)并沒(méi)有this啊。

  var adder = {
    base : 1,
    add : function(a) {
    var f = v => v + this.base; return f(a);
  },
    addThruCall: function(a) {
    var f = v => v + this.base;
    var b = { base : 2 };
    return f.call(b, a);
  }
};
    console.log(adder.add(1));
3. 怎么處理好箭頭函數(shù)的使用問(wèn)題呢?

使用非箭頭函數(shù)來(lái)處理由object.method()語(yǔ)法調(diào)用的方法。因?yàn)樗鼈儠?huì)接收到來(lái)自調(diào)用者的
有意義的this值。

在其它場(chǎng)合都使用箭頭函數(shù)。

4. 使用箭頭函數(shù)的注意點(diǎn)

箭頭函數(shù)在參數(shù)和箭頭之間不能換行。

函數(shù)體內(nèi)的this對(duì)象就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。

"use strict";
var obj = { a: 10};
Object.defineProperty(obj, "b", {
    get: () => {
    console.log(this.a, typeof this.a, this);
    return this.a+10;
    // represents global object "Window", therefore "this.a" returns "undefined"
  }
});

不可以當(dāng)作構(gòu)造函數(shù),簡(jiǎn)單說(shuō)就是不能再使用new命令了,不然會(huì)報(bào)錯(cuò)。

var Foo = () => {};
var foo = new Foo();
// TypeError: Foo is not a constructor

不可以使用arguments 對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在,如果實(shí)在要用可以用rest代替。

不可以使用yield命令,箭頭函數(shù)不可用作Generator函數(shù)。

值得注意的一點(diǎn)就是this對(duì)象的指向是可變的,但在箭頭函數(shù)內(nèi)是固定的。

5. 總結(jié)

箭頭函數(shù)是我最喜歡的ES6特性之一。使用=>來(lái)代替function是非常便捷的。但我也曾見(jiàn)過(guò)只使用
=>來(lái)聲明函數(shù)的代碼,我并不認(rèn)為這是好的做法,因?yàn)?>也提供了它區(qū)別于傳統(tǒng)function,其所
獨(dú)有的特性。我個(gè)人推薦,僅在你需要使用它提供的新特性時(shí),才使用它。

當(dāng)只有一條聲明語(yǔ)句(statement)時(shí), 隱式 return

需要使用到父作用域中的this

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83042.html

相關(guān)文章

  • ES6 - 箭頭函數(shù)箭頭函數(shù)與普通函數(shù)的區(qū)別總結(jié)

    摘要:但是因?yàn)榧^函數(shù)沒(méi)有自己的,它的其實(shí)是繼承了外層執(zhí)行環(huán)境中的,且指向永遠(yuǎn)不會(huì)隨在哪里調(diào)用被誰(shuí)調(diào)用而改變,所以箭頭函數(shù)不能作為構(gòu)造函數(shù)使用,或者說(shuō)構(gòu)造函數(shù)不能定義成箭頭函數(shù),否則用調(diào)用時(shí)會(huì)報(bào)錯(cuò)報(bào)錯(cuò)箭頭函數(shù)沒(méi)有自己的箭頭函數(shù)沒(méi)有自己的對(duì)象。 這篇文章我們來(lái)了解一下ES6中的箭頭函數(shù)。首先會(huì)介紹一下箭頭函數(shù)的基本語(yǔ)法,因?yàn)榛菊Z(yǔ)法比較好理解,我們用示例做簡(jiǎn)單介紹即可。之后,我們重點(diǎn)來(lái)討論一下...

    scola666 評(píng)論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語(yǔ)言例如來(lái)說(shuō),通過(guò)詞法分析語(yǔ)法分析語(yǔ)法樹(shù),就可以開(kāi)始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫(xiě)在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評(píng)論0 收藏0
  • 深入ES6箭頭函數(shù)

    摘要:令人震驚的箭頭函數(shù)引入了寫(xiě)入函數(shù)的新語(yǔ)法。使用箭頭函數(shù)創(chuàng)建簡(jiǎn)單對(duì)象時(shí)有一個(gè)警告。代碼因此被默默地解釋為一個(gè)不執(zhí)行任何操作并返回未定義的箭頭函數(shù)。內(nèi)部函數(shù)是一個(gè)箭頭函數(shù),所以它從封閉范圍繼承此函數(shù)。 箭頭從一開(kāi)始就一直是JavaScript的一部分。第一個(gè)JavaScript教程建議在HTML注釋中包裝內(nèi)聯(lián)腳本。這會(huì)阻止不支持JS的瀏覽器錯(cuò)誤地將JS代碼顯示為文本。你會(huì)寫(xiě)這樣的東西: ...

    MasonEast 評(píng)論0 收藏0
  • 深入理解ES6》筆記——函數(shù)(3)

    摘要:錯(cuò)誤的寫(xiě)法錯(cuò)誤的寫(xiě)法中的構(gòu)造函數(shù)新增了支持默認(rèn)參數(shù)和不定參數(shù)。箭頭函數(shù)的簡(jiǎn)單理解箭頭函數(shù)的左邊表示輸入的參數(shù),右邊表示輸出的結(jié)果。但是有了尾調(diào)用優(yōu)化之后,遞歸函數(shù)的性能有了提升。 作為前端切圖仔,越發(fā)覺(jué)得自己離不開(kāi)函數(shù)了。 說(shuō)到JavaScript函數(shù),腦子里都是匿名函數(shù)、普通函數(shù)、閉包函數(shù)、構(gòu)造函數(shù)......然后還能說(shuō)出一大堆函數(shù)的概念。如果你達(dá)到這個(gè)水平,那么函數(shù)對(duì)你來(lái)說(shuō)沒(méi)有難度...

    DoINsiSt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<