1歧蕉、函數(shù)形參的默認(rèn)值
在ES5中函數(shù)定義了參數(shù),如果要設(shè)置默認(rèn)值珊佣,則需要在函數(shù)內(nèi)進(jìn)行判斷處理傻昙,例如:
而在ES6中,可以在函數(shù)形參中直接定義默認(rèn)值彩扔,例如:
2、默認(rèn)參數(shù)影響arguments
在ES5僻爽,非嚴(yán)格模式下虫碉,修改參數(shù)時(shí),arguments也會(huì)跟著變胸梆,例如:
在嚴(yán)格模式下敦捧,則不同,修改參數(shù)碰镜,arguments的值也不會(huì)變兢卵,例如:
所以在ES6下面和ES5的嚴(yán)格模式下,arguments的行為是一樣的绪颖,修改參數(shù)值秽荤,不會(huì)影響arguments的值。
3柠横、處理無(wú)命名參數(shù)
在函數(shù)的命名參數(shù)前添加三個(gè)點(diǎn)(...)就表明這是一個(gè)不定參數(shù)窃款,該參數(shù)為一個(gè)數(shù)組,包含著自它之后傳入的所有參數(shù)牍氛,通過(guò)這個(gè)數(shù)組名即可逐一訪問(wèn)里面的參數(shù)晨继。例如:
需要注意的是:
(1)每個(gè)函數(shù)最多只能聲明一個(gè)不定參數(shù),而且一定要放在所有參數(shù)的末尾搬俊。
(2)不定參數(shù)不能用于對(duì)象字面量setter之中紊扬。
4、展開(kāi)運(yùn)算符
展開(kāi)運(yùn)算符其實(shí)跟不定參數(shù)基本相似唉擂。Math.max()方法返回兩個(gè)參數(shù)中大的一個(gè)餐屎,那么怎么返回一個(gè)數(shù)組中最大的呢。在ES6中玩祟,就可以用下面代碼:
5啤挎、箭頭函數(shù)
箭頭函數(shù)和傳統(tǒng)函數(shù)有以下幾點(diǎn)不同:
(1)沒(méi)有this、super、arguments和new.target綁定庆聘。
(2)不能通過(guò)new關(guān)鍵字調(diào)用胜臊。
(3)沒(méi)有原型
(4)不可以改變this的綁定。
(5)不支持arguments對(duì)象伙判。
(6)不支持重復(fù)的命名參數(shù)象对。
箭頭函數(shù)一般的寫法如下:
創(chuàng)建立即執(zhí)行函數(shù)表達(dá)式,例如:
6宴抚、尾調(diào)用優(yōu)化
尾調(diào)用指的是函數(shù)作為另一個(gè)函數(shù)的最后一條語(yǔ)句被調(diào)用勒魔。
在ES5中,尾調(diào)用函數(shù)會(huì)創(chuàng)建一個(gè)新的棧幀菇曲,推入調(diào)用棧冠绢,所以在循環(huán)調(diào)用的時(shí)候,相互不能釋放常潮,就可能導(dǎo)致調(diào)用棧越來(lái)越大弟胀。
在ES6中,縮減了嚴(yán)格模式下的尾調(diào)用棧的大小喊式,滿足以下條件孵户,尾調(diào)用不再創(chuàng)建新的棧幀,而是清除并重用當(dāng)前棧幀:
(1)尾調(diào)用不訪問(wèn)當(dāng)前棧幀的變量
(2)在函數(shù)內(nèi)部岔留,尾調(diào)用是最后一條語(yǔ)句
(3)尾調(diào)用的結(jié)果作為函數(shù)值返回
例如:
下面的情況不會(huì)進(jìn)行優(yōu)化:
所以一般尾調(diào)用優(yōu)化用的最多的場(chǎng)景就是遞歸函數(shù)夏哭。遞歸的計(jì)算很大,那么優(yōu)化就會(huì)很大献联。