関数に渡されたパラメーターを確認し、指定されていないものや「気に入らない」ものを置き換えたい。そのために、私は次のことを行いました(使用したい理由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に触れたくないことに注意してください。代わりに、最終的な実装では、引数をそれらで動作する関数に渡したいと思います。