我将首先用一个简单的例子来解释我在这里尝试做什么。
- 创建一个局部范围变量id并给它一个值x。
- 创建一个函数表达式,在其中我通过alert(a)打印出值x ;并将该函数作为变量fn存储在全局列表中。
- 修改id以表示值y。
- 调用fn(); 通过我的全局列表并为我打印出x 。
现在的问题是fn()打印的值是y而不是最初分配给id的x。我首先通过处理临时全局变量找到了一个解决方案,但随着项目的发展,它根本不再起作用。我不再有必要的手段来跟踪这些全球临时工。
任何帮助我指出正确方向的帮助将不胜感激。如果之前已经回答过这个问题,我深表歉意。也许我只是不太擅长搜索网络,但我还没有找到一个令人满意的。
注意:我也许应该补充一点,与我提到变量范围的次数相反,这不是问题。局部变量似乎以某种方式被全局处理(或者可能创建了指向它的全局指针?),因为当以上述方式完成时,从其他范围打印局部变量没有问题。
这是我想要的代码示例(我认为这种方式比使用我自己的代码更清晰):
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
}
}
此致。