js:无法将参数传递给setTimeOut中的匿名函数
问题描述:
我似乎无法将参数传递给匿名函数作为setTimeOut调用的参数。下面是代码js:无法将参数传递给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);
}
答
当你做到这一点setTimeout(function(arr[c]) {
你定义一个新的功能,并说,我想这个函数接受一个名为“改编[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);
}
'未捕获的SyntaxError:意外的标记['.... – davidkonrad 2015-02-09 12:21:21
是的,因为我加了参数的匿名函数...如果我删除它,代码工作,但是我没有在函数内部得到arr [c]值。 – giorgio79 2015-02-09 12:22:06
可能重复[JavaScript闭合内循环 - 简单实用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Andreas 2015-02-09 12:22:38