可以使用比正式接收更多参数调用JS函数吗?

时间:2010-01-04 22:42:53

标签: javascript

我遇到了调用fn(a,b,c)函数的代码,但fn的定义是fn(a,b)然后在作者内部调用参数[2],这意味着第三个未声明的参数。这是合法的吗? (我是网站的新手,在发布之前尝试搜索相关问题,但无法找到。如果有这样的习惯,我很乐意接受教育。)谢谢。

5 个答案:

答案 0 :(得分:6)

这是允许的。为了便于阅读和理智,通常最好指定好的参数名称,然后检查它们是否为空。阅读代码的人不会期望或理解这种技巧。

有些情况可以接受......例如:

function add(){
  var sum = 0;
  for (var i = 0; i < arguments.length; i++){
    sum += arguments[i];
  } 
  return sum;
}

但是,即使在这种情况下,最好为读者添加占位符变量名称:

function add(val1, val2, etc){
  var sum = 0;
  for (var i = 0; i < arguments.length; i++){
    sum += arguments[i];
  } 
  return sum;
}

答案 1 :(得分:2)

法律。丑陋,但合法。

答案 2 :(得分:1)

它的丑陋,但也用于许多javascript框架,例如jQuery。将它用于某些目的有明显的优点,但我遵循这些一般规则:

  • 不要仅仅因为某些(已知)参数是可选的而使用它。相反,命名参数(或将对象作为参数)并明确检查参数(或对象的属性)是否为null或未定义
  • 如果该方法可能会使用未知/无限数量的参数,那么使用此方法是有意义的,例如,如果由于某种原因创建自定义concat()方法,您可能希望允许任意数量的论点
  • 如果你使用它,请注释代码的任何可能令人困惑的部分,特别是,你想要评论/记录应该如何调用该函数

答案 3 :(得分:0)

另一种选择可能是将数组作为单个参数传递,并迭代其内容或传递感兴趣的参数并忽略其他参数的对象(名称值对)。我更喜欢传递一个物体。

答案 4 :(得分:0)

这是合法的,但我会避免它作为一种风格问题。声明参数通常是一个更好的主意 - 通过这样做,你可以使函数的含义更加明显。人们可以查看函数名称和参数列表(希望)了解函数的用途。

我会保留arguments数组用于完全可变长度的参数列表,而不仅仅是一个可选参数。