js:无法将参数传递给 setTimeOut 中的匿名函数

js: unable to pass parameter to anonymous function in setTimeOut

我似乎无法将参数作为 setTimeOut 调用的参数传递给匿名函数。这是代码

http://jsfiddle.net/5xg5d6pp/

var arr = ["Just a test","I miss you so much darling #$%&%@;..\]]/"];

console.log(arr);
for(var c=0; c < arr.length; c++){
    console.log(arr[c]);

    //wait 1 sec for next loop
    setTimeout(function(arr[c]) {
        do_magic(arr[c]);
    }, 1000);
}

function do_magic (passed_var){
    console.log(passed_var);
}

当你这样做时setTimeout(function(arr[c]) { 你正在定义一个新函数并说我希望这个函数接受一个名为 'arr[c]' 的参数,你并不是说你想将 arr[c] 传递给它并且因为你不能有任何特殊字符以参数的名称出现错误。您应该做的是在循环之外定义一个函数以避免循环关闭问题并将参数传递给让该函数为您创建 setTimeout 的函数。请参阅 JavaScript closure inside loops – simple practical example for more information about closures. Also read this to learn more about javascript functions: http://javascript.info/tutorial/functions-declarations-and-expressions

下面是正确的代码:

var arr = ["Just a test","I miss you so much darling #$%&%@;..\]]/"];

console.log(arr);
for(var c=0; c < arr.length; c++){
    console.log(arr[c]);

    setTimeoutFactory(arr[c]);
}

function do_magic (passed_var){
    console.log(passed_var);
}

function setTimeoutFactory(text) {
setTimeout(function() {
        do_magic(text);
    }, 1000);
}