【问题标题】:Javascript functions with optional first parameter, but passed second parameter [duplicate]带有可选第一个参数的Javascript函数,但传递了第二个参数[重复]
【发布时间】:2019-03-17 15:47:53
【问题描述】:

假设我有一个函数myfunc,它最多可以接受两个参数:arg1arg2

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

我想只使用arg2 调用该函数。但是,当我运行它时,输入将传递给第一个参数,myfunc 将按预期记录 "input" undefined 而不是 undefined "input"

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

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

【问题讨论】:

  • 你有这个用例吗?
  • 为什么这被否决了?问题很明确,他尝试了一些东西,有什么问题?
  • Javascript 不支持命名参数。如果您想要类似的东西,请传递一个对象。
  • 如果 arg1 和 arg2 是彼此不同的已知类型,您可以使用 function (...args) 以便您可以从数组 args 处理它们
  • @jane 所以这两个参数都是可选的,您可以使用其中一个或两个来调用函数吗?您确定要为此使用单个函数和/或两个参数吗?看起来你可能想要两个不同的函数,或者至少一个参数 object 有两个可选字段。

标签: javascript function


【解决方案1】:

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

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

myfunc({arg2:"input"})

【讨论】:

  • 我希望避免这种情况,但它确实有效!
【解决方案2】:

通过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'}) 

【讨论】:

  • @trincot 你说得对,我不知道我为什么要写这个。这是对象解构
【解决方案3】:

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

当没有任何东西传递给参数时,参数被分配undefined

这适用于默认参数:

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

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 2013-12-09
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2021-12-20
    • 2017-12-12
    相关资源
    最近更新 更多