1.函數(shù)默認(rèn)參數(shù)
在ES6之前函數(shù)不能為參數(shù)指定默認(rèn)值吮旅,只能采用變通的方法
例如:
function(x,y){
? ? ? if(!y){
? ? ? ? ? ? ? ?y = "hello"
? ? ? }
}
ES6里面函數(shù)定義:
function(x,y=”hello“){ ...............}
function foo(x=1,y=3){ ? ? console.log(x,y) ? ? ? ?}
foo(undefined,null) ? ? //輸出 1,null?
?注意:如果傳入undefined將會(huì)觸發(fā)該參數(shù)等于默認(rèn)值趟妥,null則觸發(fā)不了祟敛;
? ? ? ? ? 指定了默認(rèn)值以后函數(shù)的length屬性將返回沒(méi)有指定默認(rèn)值的參數(shù)個(gè)數(shù)疤坝,例如:foo.length = 0。
2.默認(rèn)參數(shù)的應(yīng)用
利用默認(rèn)參數(shù)可以指定某大哥參宿不可以省略馆铁,如果省略了就跑出錯(cuò)誤跑揉;
3.函數(shù)的reset
參數(shù)使用了擴(kuò)展運(yùn)算符(...),用于獲取函數(shù)的多余參數(shù),reset參數(shù)后不能再有其他參數(shù)埠巨,但之前可以有
function(...values)
? ? ? ? ? for(var val of values){
? ? ? ? ? ? ? ? ? ? ? sum += val;
? ? ? ? ? ? }
}
其中使用了ES6的for ......of.......循環(huán)
4.擴(kuò)展運(yùn)算符
1)...[2,3,4] = '2,3,4'
求數(shù)組最大值 ?Math.max(...[2,3,4,5])
2)數(shù)組合并arr1.concat(arr2) = [...arr1,...arr2]
3)與結(jié)構(gòu)賦值結(jié)合
const [fist,...last] = [1,2,3,4,5] ? //first =1;last = [2,3,4,5]
4)擴(kuò)展運(yùn)算符還可以將字符串轉(zhuǎn)換成真正的數(shù)組 [...“hello” ] = ['h','e','l','l','o']
5)任何類(lèi)似數(shù)組對(duì)象都可以用擴(kuò)展字符轉(zhuǎn)化為真正的數(shù)組[...nodeList] 历谍,ES5里需要用Array.prototype.slice.call(nodeList)
5.name屬性
????????????函數(shù)的name屬性返回函數(shù)名
6.箭頭函數(shù)
?v=>v ? ? ? ? ? ? ? ? ? 等價(jià)于 ? ? ?function(v){return v}
(x,y)=> x+y ? ? ? 等價(jià)于 function(x,y){return x+y}
注意:1)函數(shù)體內(nèi)的this對(duì)象就是定義時(shí)所在的對(duì)象,不是使用時(shí)所在對(duì)象(可以理解為箭頭函數(shù)里面沒(méi)有this指針)
? ? ? ? ? ?2) ?不可以當(dāng)做構(gòu)造函數(shù)辣垒,
? ? ? ? ? ?3)不可以使用arguments望侈,
? ? ? ? ? ?4) ?不可以適應(yīng)yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)勋桶;
? ? ? ? ? ? 5) 不能使用bind 脱衙, call , apply方法改變this指向例驹;
例如:function foo(){
? ? ? ? ? ? ? ? ? ?setTimeOut( () => { ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log(this.id)
? ? ? ? ? ? ? ? ? ? ?},1000)
? ? ? ? ? ? ?}
? ? ? ? ? ? ?foo.call({'id':10) ? ?//10
7.函數(shù)綁定::
? ??
雙冒號(hào)左邊是對(duì)象捐韩,右邊是函數(shù);
8.尾調(diào)用優(yōu)化
function ?f(x){
? ? ? ? ? return g(x);
}