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

js: unable to pass parameter to anonymous function in setTimeOut

本文关键字:函数 setTimeOut 参数传递 js      更新时间:2023-09-26

我似乎无法将参数作为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闭包——一个简单的实用示例。另请阅读本文以了解有关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);
}