想检查传递给函数的参数,并替换未指定的或者“我不喜欢”的参数。对于这一点,我已经做了以下(我为什么要使用arguments
的原因是,我想有一个泛型函数这样做)(node.js的具有相同的结果,只是改变记录仪安慰):更改函数参数
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。相反,在最后的实现中,我想将参数传递给一个对它们有效的函数。
目前,您正在成功更改'arguments [n]',但它不会影响'x','y'或'z'。为什么不使用'arguments [n]'表示法来引用'x','y','z'? – LarsH
这是什么浏览器?即使在没有参数的情况下调用函数,我也可以为'arguments'赋值。这是在Chrome中。 –
@LarsH嗯。如果在调用函数(第二次调用argtest)时指定了x,y和z,只需更改参数[0..2]即可,即使未指定它们, 'atest()') – pbhd