es6中的函數參數


es5中默認參數寫法與es6中默認參數寫法

es6之前采用變通方法

function f(x, y, z) {
      y=y||7; z=z||42; return x + y + z; } console.log(f(1)); //50

console.log(f(1,"",0));  //50

存在問題:這種寫法缺點 如果y參數有沒有賦值,如果沒有,則指定默認值7,如果y賦值了  但是對應的布爾值為false,則該賦值不起作用

如果傳入為0時 判斷時布爾值為false    結果還是50


function f(x, y, z) {
y=y||7;
z=z||42;
return x + y + z;
}
console.log(f(1,0,0));          //50



// es5的寫法
{
    function f(x, y, z) {
        if (y === undefined) {
            y = 7;
        }
        if (z === undefined) {
            z = 42;
        }
        return x + y + z;
    }
    console.log(f(1));
}
// es6的寫法
{
    function f1(x, y = 4, z = 12) {
        return x + y + z;
    }
    console.log(f1(1));
}

 除了簡潔,es6寫法還有兩個好處 閱讀代碼的人可以立刻一是到那些參數是可以省略的,不用查看函數體或文檔  其次  有利於將來代碼優化  及時未來的版本徹底拿到這個參數,也不會導致以前代碼無法運行

參數變量是默認聲明的  所以不能用let  const再次聲明


es6中默認參數名稱不能重復(不可有重名)

 

 

es6中參數的默認值一定要放在參數最后  因為實參和形參是通過順序一一對應的


 

與解構賦值默認值結合使用

 

 

 

 

 

 解構賦值的時候  兩邊解構形式要完全匹配

 

 

 function ajax(url,{
   body="",
   method="GET",
   headers={}
   }={}){
   console.log(method);
 }

ajax("www.baidu.com")

輸出   :"GET"

 function ajax(url,{
   body="",
   method="GET",
   headers={}
   }){
   console.log(method);
 }

ajax("www.baidu.com")

輸出: 因為沒有為對象賦值默認值

 

 

 


函數lenght屬性  返回沒有指定默認值參數的個數 這是因為length屬性的含義是該杉樹預期傳入的參數個數,默認參數指定默認值以后,預計傳入的參數個數就不包括這個參數了,通理  rest參數也不會計入length屬性

 

 

函數參數生成作用域   一定設置了參數的默認值  函數進行聲明初始化時,參數會形成一個單獨的作用域(context)等到初始化結束  這個是作用域就會消失

 

 

 

 

 

 

 

 

 返回昵稱名字  anonymous:匿名

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM