function foo1(a,b){
console.log(arguments); //["oldValue","oldValue"]
var newArguments = foo2.apply(this,arguments);
for (var i=0;i<arguments.length;i++){
arguments[i] = newArguments[i];
}
console.log(arguments); //["newValue","newValue"]
}
function foo2(){
arguments[0] = "newValue";
arguments[1] = "newValue";
console.log(arguments); //["newValue","newValue"]
return arguments;
}
foo1("oldValue","oldValue");
我想通过外部函数foo2更改foo1参数值。我是通过在foo2中使用新参数返回数组并用foo1中的返回数组替换foo1参数来实现的。还有其他 - 更优雅的方式吗?
答案 0 :(得分:0)
为什么不直接收到arguments
?
function foo1() {
console.log('foo1', arguments); // foo1 { '0': 'oldValue', '1': 'oldValue' }
arguments = foo2.apply(this, arguments);
console.log('foo1', arguments); // foo1 { '0': 'newValue', '1': 'newValue' }
}
function foo2() {
arguments[0] = 'newValue';
arguments[1] = 'newValue';
console.log('foo2', arguments); // foo2 { '0': 'newValue', '1': 'newValue' }
return arguments;
}
foo1('oldValue', 'oldValue');
<小时/> 更新1
由于您还要更改a
,b
,我会再次尝试拨打foo1
“,如下所示:
function foo1(a, b) {
console.log('foo1', arguments);
if (a === 'oldValue') // Detect if `arguments` has been changed or not.
// (You can also use a variable to record the change if you prefer.)
// If not, change the arguments and call `foo1` using the new arguments
return foo1.apply(this, foo2.apply(this, arguments));
console.log('foo1 (after changed)', arguments , a, b);
// Do something you want to do originally in `foo1`
}
我想你可以创建一个新函数而不是更改foo1
中的参数,因为它对我来说似乎有点棘手?
答案 1 :(得分:0)
https://jsbin.com/jibodu/1/edit?js,console
如果你从x
返回两个新参数,只需将参数设置为该返回值:
foo2
完整代码:
arguments = foo2();
答案 2 :(得分:0)
function foo1(a, b) {
foo2.apply(arguments,arguments);
console.log(arguments); //["newValue","newValue"]
console.log(a); //"newValue"
}
function foo2() {
this[0] = "newValue";
this[1] = "newValue";
};
foo1("oldValue","oldValue");