深入理解ES6三

參數(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ù)

  • ES6中允許在代碼塊中聲明函數(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ù)的不同:
    1. 沒有this、super、arguments和new.target綁定 這些值由外圍一層非箭頭函數(shù)決定
    2. 不能通過new關(guān)鍵字調(diào)用 箭頭函數(shù)沒有[[constructor]]方法,如果通過new關(guān)鍵字調(diào)用箭頭函數(shù),程序會(huì)拋出錯(cuò)誤。
    3. 沒有原型 不存在prototype這個(gè)屬性
    4. 不可以改變this的綁定 在函數(shù)的生命周期內(nèi)始終保持一致
    5. 不支持arguments對(duì)象
    6. 不支持重復(fù)命名的參數(shù)
  • 箭頭函數(shù)的語法
    1. 當(dāng)箭頭函數(shù)只有一個(gè)參數(shù)時(shí),可以直接寫參數(shù)名,箭頭緊隨其后,箭頭右側(cè)額表達(dá)式被求值后便立即返回
        let reflect = value => value;
    
    1. 如果要傳入兩個(gè)或兩個(gè)以上的參數(shù),要在參數(shù)的兩側(cè)添加一對(duì)小括號(hào)
    let sum = (num1,num2) => num1+num2;
    
    1. 如果函數(shù)沒有參數(shù),也要在聲明的時(shí)候?qū)懸唤M沒有內(nèi)容的小括號(hào)
    let getName = () => 'Tgb';
    
    1. 可以有函數(shù)體
    let sum = (num1,num2) => {
        return num1+num2;
    }
    
    1. 箭頭函數(shù)返回對(duì)象字面量
    let getTempItem = id => ({ id: id,name: 'temp' });
    
    1. 箭頭函數(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.函數(shù)參數(shù)的默認(rèn)值 (1).基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。
    趙然228閱讀 832評(píng)論 0 0
  • 三,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進(jìn),只要將碼點(diǎn)放入大括號(hào),就能正確解讀該字符。有了這...
    eastbaby閱讀 1,672評(píng)論 0 8
  • 函數(shù) 函數(shù)形參的默認(rèn)值 在ES5中模擬默認(rèn)參數(shù) 第一種方式:缺陷: 如果給num傳入值為0, 那么因?yàn)楸灰暈閒al...
    Revontulet閱讀 439評(píng)論 0 0
  • 第一章 塊級(jí)作用域綁定 let 和 const 都是不存在提升,聲明的都是塊級(jí)標(biāo)識(shí)符都禁止重聲明 每個(gè)const聲...
    NowhereToRun閱讀 1,676評(píng)論 0 2
  • 這篇文章的主要內(nèi)容包括:1、在ARC中完成一個(gè)單例模式的三步2、在MRC中完成一個(gè)單例模式的三步3、單例模式通用宏...
    serenade07閱讀 207評(píng)論 2 0

友情鏈接更多精彩內(nèi)容