摘要:函數(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; iresult){ 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)好多了。
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
摘要:標(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...
摘要:循環(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)潔。...
摘要:它是一個(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...
摘要:如果所有函數(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之前是不能為...
摘要:如果所有函數(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之前是不能為...