Javascript函数具有可选的第一个参数,但传递了第二个参数

时间:2019-03-17 15:47:54

标签: javascript function

假设我有一个函数myfunc,该函数最多可以包含两个参数:arg1arg2

var myfunc = function (arg1,arg2) {
  console.log(arg1,arg2);
};

我只想使用arg2来调用函数。但是,当我运行此命令时,输入将传递到第一个参数,并且myfunc将记录"input" undefined而不是预期的undefined "input"

myfunc(arg2 = 'input')
> "input" undefined

JavaScript是否支持这种类型的输入?

3 个答案:

答案 0 :(得分:2)

Javascript不支持带名称的参数。但是您可以使用 Unpacking fields from objects passed as function parameter并将对象传递给函数

var myfunc = function ({arg1,arg2}) {
  console.log(arg1,arg2);
};

myfunc({arg2:"input"})

答案 1 :(得分:1)

通过做myFunc(arg2 = 'input),您正在做的事情:

arg2 = 'input'
myFunc(arg2)

使其可行的解决方案可以是:

var myfunc = function (arg1='foo',arg2) {
  console.log(arg1,arg2);
}
myfunc('bar', 'input') 
myfunc(undefined, 'input') 

另一种解决方案是使用对象

var myfunc_es5 = function (opts) {
  opts = opts || {}
  console.log(opts.arg1,opts.arg2);
}
var myfunc_es6 = function ({arg1, arg2}) {
  console.log(arg1,arg2);
}
myfunc_es5 ({arg1: 'foo', arg2: 'bar'}) 
myfunc_es6 ({arg1: 'foo', arg2: 'bar'}) 
myfunc_es5 ({arg2: 'bar'}) 
myfunc_es6 ({arg2: 'bar'}) 

答案 2 :(得分:0)

如果您想表现得像什么都没传递给arg1,请传递undefined

当没有任何参数传递给参数时,将为其分配参数undefined

这适用于默认参数:

var func = function(a = 5){return a};
func(undefined); //5