成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

es6 - 函數(shù)的擴(kuò)展

youkede / 2252人閱讀

摘要:函數(shù)的擴(kuò)展上一篇,我們介紹了箭頭函數(shù)的內(nèi)容箭頭函數(shù)。匿名函數(shù)的屬性的值為空字符串。最佳實(shí)踐新引入的默認(rèn)參數(shù)和剩余參數(shù)特性都非常好用。推薦使用默認(rèn)參數(shù)代替原來(lái)默認(rèn)值的書(shū)寫(xiě)方式,使用剩余參數(shù)代替的能力來(lái)操作參數(shù)。

es6 - 函數(shù)的擴(kuò)展

上一篇,我們介紹了es6箭頭函數(shù)的內(nèi)容 - es6 - 箭頭函數(shù)。

事實(shí)上,箭頭函數(shù)只是函數(shù)擴(kuò)展中最有意思的那部分,除此以外,es6函數(shù)還增加了一些其他的特性,下面將對(duì)它們進(jìn)行一一介紹。

語(yǔ)法 es6函數(shù)參數(shù)的默認(rèn)值

在es6之前,我們?nèi)绻胍O(shè)置函數(shù)參數(shù)的默認(rèn)值,需要這樣寫(xiě)代碼:

function makeRequest(url, timeout, callback){
    timeout = timeout || 2000;
    callback = callback || function(){};
    //...
}

或者更加嚴(yán)謹(jǐn)?shù)膶?xiě)法:

timeout = (typeof timeout !== "undefined") ? timeout : 2000;
callback = (typeof callback !== "undefined") ? callback : function(){};

es6增加了函數(shù)參數(shù)默認(rèn)值的特性,可以直接在參數(shù)里設(shè)置

function makeRequest(url, timeout = 2000, callback = function(){}){
    //...
}

注意:只有在沒(méi)有傳入相應(yīng)的參數(shù)或是傳入undefined時(shí),才會(huì)使用參數(shù)的默認(rèn)值。

es6剩余參數(shù)

剩余參數(shù)由三個(gè)點(diǎn)...和一個(gè)具名參數(shù)指定,比如

function pick(object, ...keys){
    console.log(keys);
}

在這個(gè)函數(shù)內(nèi)部,剩余參數(shù)keys是由傳入的第二個(gè)參數(shù)及以后的參數(shù)組成的數(shù)組。如果只傳入0個(gè)或者1個(gè)參數(shù),keys為空數(shù)組。

擴(kuò)展運(yùn)算符...

擴(kuò)展運(yùn)算符有點(diǎn)像是剩余參數(shù)的反作用。 我們使用一個(gè)場(chǎng)景來(lái)說(shuō)明擴(kuò)展運(yùn)算符...該怎么使用:

function getMax(num1, num2){
    let result = arguments[0];
    for(var i=0; i result){
            result = arguments[i];
        }
    }
    return result;
}

上面這個(gè)函數(shù)大概實(shí)現(xiàn)了返回參數(shù)中最大值的功能。我們可以這樣調(diào)用它,getMax(num1, num2, num3, ...)。

可是如果我現(xiàn)在想把一個(gè)很大的數(shù)組 arr 作為參數(shù)傳入函數(shù)中呢?

或許可以使用apply方法:getMax.apply(null, arr);

可是這樣實(shí)現(xiàn)總感覺(jué)不大對(duì)勁,使用...能夠使得代碼意圖更加清晰: getMax(...arr)。

...運(yùn)算符能夠?qū)rr分割為多帶帶的參數(shù)傳入函數(shù),它甚至還可以和其他參數(shù)一起使用:
比如: getMax(num1, ...arr, num2)。代碼這樣看起來(lái)好多了。

函數(shù)的名稱屬性

es6給所有的函數(shù)都添加了name屬性,用來(lái)根據(jù)名稱識(shí)別函數(shù)。匿名函數(shù)的name屬性的值為空字符串。在實(shí)踐中,該屬性使用很少,不再贅述。

尾調(diào)用優(yōu)化

記得在js語(yǔ)言精粹中介紹遞歸部分時(shí),作者說(shuō),js沒(méi)有尾調(diào)用優(yōu)化,所以遞歸可能因?yàn)槎褩R绯龆\(yùn)行失敗。
在es6中,js提供了尾調(diào)用優(yōu)化,什么是尾調(diào)用優(yōu)化?可以參考下面代碼:

function doSomething(){
    return doSomethingElse();
}

上面的doSomethingElse函數(shù)的調(diào)用語(yǔ)句是doSomething的最后一條語(yǔ)句,并作為doSomething返回值返回。上面的函數(shù)就實(shí)現(xiàn)了尾調(diào)用優(yōu)化。

尾調(diào)用優(yōu)化能夠提高函數(shù)的性能。它最適合的使用場(chǎng)景是在遞歸中使用。

在平時(shí)的開(kāi)發(fā)中,除非使用遞歸或者是盡力優(yōu)化函數(shù)的性能,否則無(wú)需考慮太多尾遞歸優(yōu)化。

注意事項(xiàng)

使用剩余參數(shù)時(shí),剩余參數(shù)在函數(shù)中最多只能有一個(gè),并且要作為最后一個(gè)參數(shù)。

除了上面列舉的外,es6函數(shù)還引入了new.target元屬性。用來(lái)判斷函數(shù)的調(diào)用方式,是作為普通函數(shù)調(diào)用,還是使用new作為構(gòu)造函數(shù)調(diào)用。

最佳實(shí)踐

es6新引入的默認(rèn)參數(shù)和剩余參數(shù)特性都非常好用。推薦使用默認(rèn)參數(shù)代替原來(lái)arg1 = arg1 || 默認(rèn)值 的書(shū)寫(xiě)方式, 使用剩余參數(shù)代替arguments的能力來(lái)操作參數(shù)。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107549.html

相關(guān)文章

  • ES6標(biāo)準(zhǔn)入門(mén)》讀書(shū)筆記

    摘要:標(biāo)準(zhǔn)入門(mén)讀書(shū)筆記和命令新增命令,用于聲明變量,是塊級(jí)作用域。用于頭部補(bǔ)全,用于尾部補(bǔ)全。函數(shù)調(diào)用的時(shí)候會(huì)在內(nèi)存形成一個(gè)調(diào)用記錄,又稱為調(diào)用幀,保存調(diào)用位置和內(nèi)部變量等信息。等到執(zhí)行結(jié)束再返回給,的調(diào)用幀才消失。 《ES6標(biāo)準(zhǔn)入門(mén)》讀書(shū)筆記 @(StuRep) showImg(https://segmentfault.com/img/remote/1460000006766369?w=3...

    HollisChuang 評(píng)論0 收藏0
  • ES6入門(mén)之對(duì)象擴(kuò)展

    摘要:循環(huán)遍歷對(duì)象自身的和繼承的可枚舉屬性不含屬性。返回一個(gè)數(shù)組,包含對(duì)象自身的所有屬性的鍵名。目前,只有對(duì)象方法的簡(jiǎn)寫(xiě)法可以讓引擎確認(rèn),定義的是對(duì)象的方法。showImg(https://user-gold-cdn.xitu.io/2019/5/21/16ada8456223b0e1); 1. 屬性的簡(jiǎn)潔表示法 在ES6中 允許直接寫(xiě)入變量和函數(shù),作為對(duì)象的屬性和方法,使得代碼的書(shū)寫(xiě)更為簡(jiǎn)潔。...

    RiverLi 評(píng)論0 收藏0
  • ES6學(xué)習(xí)手稿之基本類型擴(kuò)展

    摘要:它是一個(gè)通用標(biāo)準(zhǔn),奠定了的基本語(yǔ)法。年月發(fā)布了的第一個(gè)版本,正式名稱就是標(biāo)準(zhǔn)簡(jiǎn)稱。結(jié)語(yǔ)的基本擴(kuò)展還有一些沒(méi)有在這里詳細(xì)介紹。 前言 ES6標(biāo)準(zhǔn)以及頒布兩年了,但是,好像還沒(méi)有完全走進(jìn)我們的日常開(kāi)發(fā)。這篇文章從ES6的基本類型擴(kuò)展入手,逐步展開(kāi)對(duì)ES6的介紹。 ECMAScript和JavaScript JavaScript是由Netscape創(chuàng)造的,該公司1996年11月將JavaSc...

    tommego 評(píng)論0 收藏0
  • ES6入門(mén)之函數(shù)擴(kuò)展

    摘要:如果所有函數(shù)都是尾調(diào)用,那么完全可以做到每次執(zhí)行時(shí),調(diào)用幀只有一項(xiàng),這將大大節(jié)省內(nèi)存。等同于等同于注意,只有不再用到外層函數(shù)的內(nèi)部變量,內(nèi)層函數(shù)的調(diào)用幀才會(huì)取代外層函數(shù)的調(diào)用幀,否則就無(wú)法進(jìn)行尾調(diào)用優(yōu)化。 showImg(https://segmentfault.com/img/bVbrTHp?w=1080&h=1920); 1. 函數(shù)參數(shù)的默認(rèn)值 1.1 用法 在ES6之前是不能為...

    dackel 評(píng)論0 收藏0
  • ES6入門(mén)之函數(shù)擴(kuò)展

    摘要:如果所有函數(shù)都是尾調(diào)用,那么完全可以做到每次執(zhí)行時(shí),調(diào)用幀只有一項(xiàng),這將大大節(jié)省內(nèi)存。等同于等同于注意,只有不再用到外層函數(shù)的內(nèi)部變量,內(nèi)層函數(shù)的調(diào)用幀才會(huì)取代外層函數(shù)的調(diào)用幀,否則就無(wú)法進(jìn)行尾調(diào)用優(yōu)化。 showImg(https://segmentfault.com/img/bVbrTHp?w=1080&h=1920); 1. 函數(shù)參數(shù)的默認(rèn)值 1.1 用法 在ES6之前是不能為...

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

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

0條評(píng)論

youkede

|高級(jí)講師

TA的文章

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