我在调用带有作为变量传递的参数的匿名函数时遇到问题。如果我在将变量作为参数传递给匿名函数后将其保存到数组中,那么我更改变量并调用该函数,它会打印变量的最后一个值,而不是我推送匿名函数时变量的值进入我的数组。
我在以下示例中简化了代码:
var arr = [];
function myFunction(index) {
alert(index);
}
function doPush() {
var k = 'hello';
var f = function(){myFunction(k);};
arr.push(f);
k = 'goodbye';
}
function invoker(op) {
op();
}
function invokePushed() {
invoker(arr[0]);
}
doPush();
invokePushed();
好吧,invokePushed();警报“再见”而不是“你好”。我的目标是将多个函数存储到数组中并按顺序调用它们,但这样数组中的所有函数都具有相同的(最后一个)参数值。
我知道我可以通过将函数的字符串表示形式推入数组来解决这个问题:
var f = 'myFunction(\''+k+'\');';
并在调用程序函数中使用 eval 调用它,但我希望使用第一种方法。
是否可以?
Thanks,
亚历山德罗.
您必须创建一个新范围,其中当前值k
被捕获。 JavaScript 只有函数作用域,所以你可以用立即函数:
var f = (function(value) {
return function(){myFunction(value);};
}(k));
您可以通过创建一个生成匿名函数的命名函数来使其更具可读性:
function getFunction(value) {
return function(){myFunction(value);};
}
// later
var f = getFunction(k);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)