可选形参说明
坑军之王
156
当调用函数的时候传入的实参比函数声明置顶的形参个数要少,剩下的形参都将设置为undefiend值。因此在调用函数时形参是否可选及是否可以省略应该保持较好的适应性。为了做到这一点,应该给省略的参数赋一个合理的默认值。
function getPropertyNames(o,/*optional*/a){
if(a===undefined) a=[]; //如果未定义,则使用新数组[1]
for(var property in o) a.push(property);
return a;
}
var a = getPropertyNames(o);//将o的属性存储到一个新数组中
getPropertyNames(p,a);//将p的属性追加到数组a中
[1] 本行代码可以使用a=a||[];代替,但这么用的前提是a必须先定义,而在这个代码中,a是作为一个形参传入的,相当于var a;
在使用这种方法的时候,可选实参必须放在最后。调用函数时不可能跳过第一个参数直接设置第二个参数的,如果需要的话,必须将undefined作为第一个实参显式传入,当然,使用null也可以。刚刚的做法只是进行占位。