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

时间:2015-02-09 12:19:51

标签: javascript settimeout anonymous-function

我似乎无法将参数传递给匿名函数作为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);
}

1 个答案:

答案 0 :(得分:0)

执行此操作时setTimeout(function(arr[c]) { 你正在定义一个新函数,并说我希望这个函数接受一个名为'arr [c]'的参数,你不是说你想把arr [c]传递给它,因为你不能有任何特殊的您获得错误的参数名称中的字符。你应该做的是在循环之外定义一个函数以避免循环闭包问题,并将参数传递给该函数,让该函数为你创建setTimeout。有关闭包的详细信息,请参阅JavaScript closure inside loops – simple practical example。另请阅读此内容以了解有关javascript函数的更多信息: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);
}