參數(shù)
- ES6簡(jiǎn)化了為形式參數(shù)提供默認(rèn)值的過程
function makeRequest(rul,timeout = 2000,callback) {
//函數(shù)其余部分
}
- 上面的函數(shù)只有當(dāng)不為第二個(gè)參數(shù)傳入值或者主動(dòng)為第二個(gè)參數(shù)傳入undefined時(shí)才會(huì)使用timeout的默認(rèn)值
- 在ES6中一個(gè)函數(shù)使用了默認(rèn)參數(shù)值,會(huì)使得arguments對(duì)象保持與命名參數(shù)的分離,無論參數(shù)如何變化,arguments對(duì)象不再隨之改變。
function mix(first,second='b') {
console.log(arguments.length); // 1 之傳入了一個(gè)參數(shù)
console.log(first === arguments[0]) // true
console.log(second === aruments[1]) // false //arguments[1]是undefined
}
mix('a');
- 默認(rèn)參數(shù)表達(dá)式
- ES6中可以使用先定義的參數(shù)作為后定義參數(shù)的默認(rèn)值,但是后定義的參數(shù)不能作為先定義參數(shù)的默認(rèn)值。
- 默認(rèn)參數(shù)也存在臨時(shí)死區(qū),定義參數(shù)時(shí)會(huì)為每個(gè)參數(shù)創(chuàng)建一個(gè)新的標(biāo)識(shí)符綁定,該綁定在初始化之前不可被引用,如果訪問會(huì)導(dǎo)致程序錯(cuò)誤
不定參數(shù)
- 在函數(shù)的命名參數(shù)錢添加三個(gè)點(diǎn)(...)就表明這是一個(gè)不定參數(shù),該參數(shù)為一個(gè)數(shù)組,包含著自它之后出入的所有參數(shù),通過這個(gè)數(shù)組名即可逐一訪問里面的參數(shù)。
- 不定參數(shù)的使用限制:1.每個(gè)函數(shù)最多只能聲明一個(gè)不定參數(shù),而且一定要放在所有參數(shù)的末尾。2.不定參數(shù)不能用于對(duì)象字面量setter中
- arguments對(duì)象包含不定參數(shù),無論是否使用不定參數(shù),argumetns對(duì)象總是包含所有傳入函數(shù)的參數(shù)
展開運(yùn)算符
- 展開運(yùn)算符可以讓你指定一個(gè)數(shù)組,將它們打散后作為各自獨(dú)立的參數(shù)傳入函數(shù)
- 展開運(yùn)算符的使用:例如`Math.max()`方法可以接受任意數(shù)量的參數(shù)并返回值最大的一個(gè),但是該方法不允許傳入數(shù)組。
```
// ES5使用
let values = [25,50,75,100];
console.log(Math.max.apply(Math,values)); //100
// Es6使用
console.log(Math.max(...values)); //100
```
判斷函數(shù)被調(diào)用的方法
- 在ES5中判斷一個(gè)函數(shù)是否通過new關(guān)鍵字被調(diào)用(或者說,判斷該函數(shù)是否作為構(gòu)造函數(shù)被調(diào)用),最常使用的是instanceof
- instanceof語法:
Object instanceof constructor; instanceof運(yùn)算符用來檢測(cè)constructor.prototype是否存在于參數(shù)Object的原型鏈上
- ES6引入了
new.target這個(gè)元屬性,元屬性市值非對(duì)象的屬性,其可以提供非對(duì)象目標(biāo)的補(bǔ)充信息,當(dāng)調(diào)用函數(shù)的[construct]方法時(shí),new.target被賦值new操作符的目標(biāo),通常是新創(chuàng)建的對(duì)象實(shí)例。如果用[[call]]方法,則new.target的值為undefined。
塊級(jí)函數(shù)
if(true) {
function doSomething() {
}
}
- 塊級(jí)函數(shù)的聲明提升
- 函數(shù)聲明的塊級(jí)函數(shù)會(huì)被提升至塊的頂部而用let定義的函數(shù)表達(dá)式不會(huì)被提升
- ES6嚴(yán)格模式下塊級(jí)函數(shù)只會(huì)提升至塊的頂部,但是在非嚴(yán)格模式下函數(shù)會(huì)被提升至外圍函數(shù)或全局作用域的頂部。
箭頭函數(shù)
- 箭頭函數(shù)是一種使用箭頭(=>)定義函數(shù)的新語法
- 與傳統(tǒng)函數(shù)的不同:
- 沒有this、super、arguments和new.target綁定 這些值由外圍一層非箭頭函數(shù)決定
- 不能通過new關(guān)鍵字調(diào)用 箭頭函數(shù)沒有[[constructor]]方法,如果通過new關(guān)鍵字調(diào)用箭頭函數(shù),程序會(huì)拋出錯(cuò)誤。
- 沒有原型 不存在
prototype這個(gè)屬性
- 不可以改變
this的綁定 在函數(shù)的生命周期內(nèi)始終保持一致
- 不支持arguments對(duì)象
- 不支持重復(fù)命名的參數(shù)
- 箭頭函數(shù)的語法
- 當(dāng)箭頭函數(shù)只有一個(gè)參數(shù)時(shí),可以直接寫參數(shù)名,箭頭緊隨其后,箭頭右側(cè)額表達(dá)式被求值后便立即返回
let reflect = value => value;
- 如果要傳入兩個(gè)或兩個(gè)以上的參數(shù),要在參數(shù)的兩側(cè)添加一對(duì)小括號(hào)
let sum = (num1,num2) => num1+num2;
- 如果函數(shù)沒有參數(shù),也要在聲明的時(shí)候?qū)懸唤M沒有內(nèi)容的小括號(hào)
let getName = () => 'Tgb';
- 可以有函數(shù)體
let sum = (num1,num2) => {
return num1+num2;
}
- 箭頭函數(shù)返回對(duì)象字面量
let getTempItem = id => ({ id: id,name: 'temp' });
- 箭頭函數(shù)的自調(diào)用 沙箱模式
let person = ((name) => {
return {
getName: function() {
retrun name;
}
};
})('tgb');
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。