根据条件语句调用带有多个参数的函数

3

标题已经说明了一切,我有以下函数:

var foo = function(arg1, arg2,arg3) {
    // code
}

我想做类似以下的事情:
foo('bar', (x == true ? arg2, arg3 : arg2,arg3))

但我遇到了SyntaxError: Unexpected token ,这种错误,该怎么正确地书写语法以实现此类操作呢?


你实际上想要实现什么? - PM 77-1
3个回答

9

我会像JCOC611所说的那样选择可读性...

然而,"正确"的方法是使用.apply():

foo.apply(this, (x == true ? [arg1, arg2, arg3] : [arg1 ,arg2, arg3]))

5

我认为节省几个字符并不值得。拥有易读的代码更加有价值。只需要使用一个压缩/混淆工具,然后按照以下步骤操作:

if(x === true){
   foo('bar', arg2, arg3);
}else{
   foo('bar', arg2, arg3);
}

我在某种程度上不太认同这个解决方案,当一个函数有特定的方法(apply)时,我们应该使用它。 - zakir

0
var foo = function(arg1, arg2,arg3) {
    console.log(arguments)
}
var x = false;
var args = [];
args.push('bar');
x == true ? (function(){args.push('arg2'); args.push('arg3')})() : args.push('arg2');
console.log(args)
foo.apply(this,args)

有两种方法可以将变量的参数传递给函数。

  1. bind
  2. apply

根据您的需要选择其中一种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接