这里有一些您可能知道或不知道的 javascript 函数参数变量的有趣行为:
function foo(bar) {
console.log('bar was:', bar);
arguments[0] = 'zap';
console.log('bar now:', bar);
}
foo('bam');
// bar was: bam
// bar now: zap
如您所见bar
,变量现在指向另一个值。
我想以一种有点奇怪的方式利用这种行为,我想知道是否有可能以某种方式从函数范围之外更改参数值?
也许使用 call/apply 或其他一些棘手的 js 功能?
所以我可以在调用函数参数后更改它的值,例如:
function chooseNumber(number) {
setInterval(function() {
console.log('I choosed:', number)
}, 1000)
}
chooseNumber(1);
// I choosed: 1
// I choosed: 1
// I choosed: 1
// ...
然后,如果我决定改变主意,我该怎么做才能使初始函数输出:
// I choosed: 2
// I choosed: 2
// I choosed: 2
// ...