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:匿名

