我似乎无法将参数传递给匿名函数作为setTimeOut调用的参数。这是代码
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);
}
答案 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);
}