標準の定義を満たすために別の関数の引数を再配置する関数があります。
function main(a, b, c) {
console.log(a, b, c); // 1 undefined undefined
console.log(arguments[0], arguments[1], arguments[2]); // 1 undefined undefined
shiftArgs(arguments, 3); // 3 because I'm expecting 3 arguments.
console.log(arguments[0], arguments[1], arguments[2]); // null null 1
console.log(a, b, c); // 1 undefined undefined ***
}
function shiftArgs(args, c) {var i, len;
len = args.length;
if (len < c) {
for (i = c - 1; i >= 0; i -= 1) {
args[i] = ((i - c + len) > -1 ? args[i - c + len] : null);
}
args.length = c;
}
};
main(1); // only calling main with one argument, which therefore needs to be the last one.
*** は問題の行であり、再割り当てされた引数オブジェクトと一致するように「null null 1」にする必要があります。
引数オブジェクトは必要に応じて変更され、メインによって呼び出される値「1」が最後の引数に移動されます。ただし、引数オブジェクトを移動しても、引数にマップされる変数名は変更されません (*** でマークされた最後の console.log を参照)。これは、変更された引数オブジェクトと一致するように null null 1 である必要があります)。
引数オブジェクトと一致するように、変数 a、b、および c を shiftArgs 関数によって再割り当てするにはどうすればよいですか?