2015-02-09 125 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); 
} 
相關問題