我将首先通过一个简单的例子解释我在这里要做的事情。
现在的问题是 fn()打印的值是 y 而不是 x ,因为最初分配给 id 。我首先通过处理临时全局变量找到了一个解决方案,但由于项目增长了很多,它根本不起作用。我不再拥有跟踪这些全球临时所需的手段。
任何帮助指出我正确方向的人都将不胜感激。如果之前已经回答过这个问题,我道歉。也许我不是很擅长搜索网页,但我还没有找到令人满意的网站。
注意:我或许应该补充说明我提到变量范围的次数,这不是问题。局部变量似乎以某种方式被全局处理(或者可能是创建它的全局指针?),因为在以上述方式完成时从其他范围打印局部变量没有问题。
以下是我想要的代码示例(我认为这样比使用我自己的代码更清晰):
var fnList = []
function FunctionA(){
for(var i = 0; i < 10; i++){
var iToFunctionExpression = i; // this is where I want to somehow send my variable to the function
fnList.push(function(){
alert(iToFunctionExpression);
});
}
}
function FunctionB(){
for(var i = 10; i < 20; i++){
var iToFunctionExpression = i; // this is where I want to somehow send my variable to the function
fnList.push(function(){
alert(iToFunctionExpression);
});
}
}
function FunctionPrintAB(){
for(var fn = 0; fn < fnList.length; fn++){
fnList[fn](); // here I want to alert the numbers 0 through 19
}
}
最好的问候。
答案 0 :(得分:1)
您需要构建一个闭包:
var x = 1;
function makealerter(i) {
return function() {
alert(i);
}
}
var fn = makealerter(x);
var y = 2;
fn();
x = y;
fn();