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將會觸發(fā)該參數(shù)等于默認(rèn)值橄仍,null則觸發(fā)不了;
? ? ? ? ? 指定了默認(rèn)值以后函數(shù)的length屬性將返回沒有指定默認(rèn)值的參數(shù)個數(shù),例如:foo.length = 0竞漾。
2.默認(rèn)參數(shù)的應(yīng)用
利用默認(rèn)參數(shù)可以指定某大哥參宿不可以省略,如果省略了就跑出錯誤窥翩;
3.函數(shù)的reset
參數(shù)使用了擴展運算符(...),用于獲取函數(shù)的多余參數(shù)畴蹭,reset參數(shù)后不能再有其他參數(shù),但之前可以有
function(...values)
? ? ? ? ? for(var val of values){
? ? ? ? ? ? ? ? ? ? ? sum += val;
? ? ? ? ? ? }
}
其中使用了ES6的for ......of.......循環(huán)
4.擴展運算符
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)擴展運算符還可以將字符串轉(zhuǎn)換成真正的數(shù)組 [...“hello” ] = ['h','e','l','l','o']
5)任何類似數(shù)組對象都可以用擴展字符轉(zhuǎn)化為真正的數(shù)組[...nodeList] 鳍烁,ES5里需要用Array.prototype.slice.call(nodeList)
5.name屬性
函數(shù)的name屬性返回函數(shù)名
6.箭頭函數(shù)
?v=>v ? ? ? ? ? ? ? ? ? 等價于 ? ? ?function(v){return v}
(x,y)=> x+y ? ? ? 等價于 function(x,y){return x+y}
注意:1)函數(shù)體內(nèi)的this對象就是定義時所在的對象叨襟,不是使用時所在對象(可以理解為箭頭函數(shù)里面沒有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ù)綁定::
雙冒號左邊是對象姚垃,右邊是函數(shù)念链;
8.尾調(diào)用優(yōu)化
function ?f(x){
? ? ? ? ? return g(x);
}
尾調(diào)用是由于函數(shù)在調(diào)用時會生成一個調(diào)用幀,用來保存變量位置等信息;如果函數(shù)A的內(nèi)部調(diào)用函數(shù)B掂墓,那么在A的調(diào)用幀的上部就會有B的調(diào)用幀谦纱。而尾部調(diào)用由于是函數(shù)的最后一步操作,所以沒必要再保留外層函數(shù)的調(diào)用幀君编,這大大節(jié)省了內(nèi)存空間跨嘉。
9.尾遞歸和柯里化
柯里化意思是將多參數(shù)的函數(shù)轉(zhuǎn)化成但參數(shù)的形式。
尾遞歸尾調(diào)用自身即為尾遞歸吃嘿。