如何将函数的参数重新分配回原始参数名称?
How to re-assign the arguments of a function back to the original argument names?
我有一个函数可以重新排列另一个函数的参数以满足标准定义。
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" 以匹配重新分配的参数对象。
arguments 对象随心所欲地改变,main 调用的值“1”移动到最后一个参数。但是,在我移动参数对象后,映射到参数的变量名称不会更改(请参阅最后一个标有 *** 的 console.log)。这需要为 null null 1 以匹配更改后的参数对象)。
我怎样才能让 shiftArgs 函数重新分配变量 a、b 和 c 以匹配参数对象?
您是否正在寻找比以下内容更通用的内容:
a = arguments[0];
b = arguments[1];
c = arguments[2];
?我比较确定这是不可能的。
您不想那样乱用参数对象。参数变量映射到它被认为是错误的,它也不会在严格模式下工作。
最好使用函数装饰器来处理这些事情:
function shiftArgs(fn, c) {
return function() {
var lastIdx = arguments.length;
if (arguments.length < c)
for (var i = c-1; i >= 0; i--)
arguments[i] = ((i - c + lastIdx) > -1 ? arguments[i - c + lastIdx] : null);
arguments.length = c;
return fn.apply(this, arguments);
};
}
var main = shiftArgs(function(a, b, c) {
console.log(a, b, c); // null null 1
}, 3);
我有一个函数可以重新排列另一个函数的参数以满足标准定义。
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" 以匹配重新分配的参数对象。
arguments 对象随心所欲地改变,main 调用的值“1”移动到最后一个参数。但是,在我移动参数对象后,映射到参数的变量名称不会更改(请参阅最后一个标有 *** 的 console.log)。这需要为 null null 1 以匹配更改后的参数对象)。
我怎样才能让 shiftArgs 函数重新分配变量 a、b 和 c 以匹配参数对象?
您是否正在寻找比以下内容更通用的内容:
a = arguments[0];
b = arguments[1];
c = arguments[2];
?我比较确定这是不可能的。
您不想那样乱用参数对象。参数变量映射到它被认为是错误的,它也不会在严格模式下工作。
最好使用函数装饰器来处理这些事情:
function shiftArgs(fn, c) {
return function() {
var lastIdx = arguments.length;
if (arguments.length < c)
for (var i = c-1; i >= 0; i--)
arguments[i] = ((i - c + lastIdx) > -1 ? arguments[i - c + lastIdx] : null);
arguments.length = c;
return fn.apply(this, arguments);
};
}
var main = shiftArgs(function(a, b, c) {
console.log(a, b, c); // null null 1
}, 3);