想检查传递给函数的参数并替换未指定的参数或“我不喜欢”的参数。为此,我做了以下事情(我想使用的原因arguments
是我想要一个通用函数)(与 node.js 的结果相同,只需将 Logger 更改为控制台):
function argtest (x,y,z) {
Logger.log ("at begin x="+x+", y="+y+", z="+z);
arguments.length=3; // found this somewhere, doesn't help
arguments[0]="a";
arguments[1]="b";
arguments[2]="c";
Logger.log ("arguments now:");
for (var i in arguments) {
Logger.log ("arguments["+i+"]="+arguments[i]);
}
Logger.log ("at end x="+x+", y="+y+", z="+z);
}
function callArgTest () {
argtest ();
argtest (1,2,3);
}
所以调用的结果callArgTest
是:
Logger.log([at begin x=undefined, y=undefined, z=undefined, []])
Logger.log([arguments now:, []])
Logger.log([arguments[0]=a, []])
Logger.log([arguments[1]=b, []])
Logger.log([arguments[2]=c, []])
Logger.log([at end x=undefined, y=undefined, z=undefined, []])
Logger.log([at begin x=1, y=2, z=3, []])
Logger.log([arguments now:, []])
Logger.log([arguments[0]=a, []])
Logger.log([arguments[1]=b, []])
Logger.log([arguments[2]=c, []])
Logger.log([at end x=a, y=b, z=c, []])
因此,参数 x,y,z 仅在最初指定时发生变化。在第一种情况下(argtest
不带参数调用),即使在为参数赋值之后,它们仍然是未定义的。那么这里缺少什么使它起作用呢?请注意,我不想触摸 x,y,z。相反,在最终实现中,我想将参数传递给对它们起作用的函数。