在javascript中将变量发送到函数表达式?

时间:2013-10-08 22:47:23

标签: javascript function variables

我将首先通过一个简单的例子解释我在这里要做的事情。

  1. 创建一个本地范围变量 id 并为其指定值 x
  2. 创建一个函数表达式,我通过 alert(a); 打印出值 x ,并将该函数存储为变量 fn 在全球名单中。
  3. 修改 id 以表示值 y
  4. 通过我的全局列表调用 fn(); 并打印出 x
  5. 现在的问题是 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
        }
    }
    

    最好的问候。

1 个答案:

答案 0 :(得分:1)

您需要构建一个闭包:

var x = 1;

function makealerter(i) {
    return function() {
        alert(i);
    }
}

var fn = makealerter(x);

var y = 2;

fn();

x = y;

fn();