ES6支持參數解構。 您可以使用:
// you pass option to a function old way
function oldOps(option){
var protocol = option.protocol;
var method = option.method;
var port = option.port;
console.log(port);
}
// new and more readable way
function newOps({protocol, method, port}){
console.log(port)
}
只有老IE不支持它:
function bar({a}){
console.log(a)
}
但是通常當你有多個參數,它是有用的。
但是,當我直接傳遞一個對象,這是行不通的:
function bar({a: 0}){
console.log(this.arguments.a)
}
你不能傳遞參數這樣或使缺省參數初始化。此外,在你的情況下this
將引用父對象,所以this.arguments.a
沒有意義。
使用參數解構,你可以使用默認參數,所以你的代碼看起來:
function bar({a = 0}){
console.log(a)
}
bar({}) // 0
不過,任何努力來調用它不帶參數會導致錯誤的JS會盡力解決的undefined
財產
您可以使用其他默認參數分配來解決問題。如果你真的想叫bar()
不帶參數,併爲您應該使用類似解構後的參數默認值:
function bar({a = 0} = {a:0}){/*...*/}
但不要忘記,它沒有得到廣泛的瀏覽器支持,因此你將不得不使用編譯器將您的ES6代碼轉換爲瀏覽器支持的代碼。
最受歡迎的轉播是Babel和Typescript。
*此*僅爲上下文!不要使用它來訪問變量。 –
函數的語法錯誤。檢查如何使用函數的基本教程。 – lilezek
您正在混合函數調用和函數定義。參數在函數調用中傳遞,它們沒有在函數定義的參數列表中獲取它們的值。 – Teemu