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