如何使用本地参数创建匿名函数

Tyi*_*ilo 6 javascript anonymous-function

如何使这个javascript警报0,1和2而不是3 3?

var vals = [1, 2, 3];
for(var i = 0; i < vals.length; i++)
{
    window.setTimeout(function() {alert(i);}, 1000);
}
Run Code Online (Sandbox Code Playgroud)

我知道它为什么这样做,但我无法弄清楚,如何传递i给匿名函数.

Sky*_*son 9

你可以将它包装在一个闭包中,如下所示:

var vals = [1, 2, 3];

for(var i = 0; i < vals.length; i++) {
    (function(num) {
        window.setTimeout(function() {alert(vals[num]);}, 1000);
     })(i);
}
Run Code Online (Sandbox Code Playgroud)

试试吧:http://jsfiddle.net/qgL7h/