我遇到了调用fn(a,b,c)函数的代码,但fn的定义是fn(a,b)然后在作者内部调用参数[2],这意味着第三个未声明的参数。这是合法的吗? (我是网站的新手,在发布之前尝试搜索相关问题,但无法找到。如果有这样的习惯,我很乐意接受教育。)谢谢。
答案 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。将它用于某些目的有明显的优点,但我遵循这些一般规则:
答案 3 :(得分:0)
另一种选择可能是将数组作为单个参数传递,并迭代其内容或传递感兴趣的参数并忽略其他参数的对象(名称值对)。我更喜欢传递一个物体。
答案 4 :(得分:0)
这是合法的,但我会避免它作为一种风格问题。声明参数通常是一个更好的主意 - 通过这样做,你可以使函数的含义更加明显。人们可以查看函数名称和参数列表(希望)了解函数的用途。
我会保留arguments
数组用于完全可变长度的参数列表,而不仅仅是一个可选参数。