2015-02-09 147 views
0

我似乎无法将参数传递给匿名函数作为setTimeOut调用的参数。下面是代码js:无法将参数传递给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); 
} 
+0

'未捕获的SyntaxError:意外的标记['.... – davidkonrad 2015-02-09 12:21:21

+0

是的,因为我加了参数的匿名函数...如果我删除它,代码工作,但是我没有在函数内部得到arr [c]值。 – giorgio79 2015-02-09 12:22:06

+3

可能重复[JavaScript闭合内循环 - 简单实用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Andreas 2015-02-09 12:22:38

回答

0

当你做到这一点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); 
} 
相关问题