2015-02-09 1 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

'Uncaught SyntaxError: Неожиданный маркер [' .... – davidkonrad

+0

Да, потому что я добавил параметр в анонимная функция ... Если я удалю ее, код работает, но тогда я не получаю значения arr [c] внутри функции. – giorgio79

+3

Возможный дубликат [JavaScript закрытия внутри петель - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Andreas

ответ

0

Когда вы сделаете это setTimeout(function(arr[c]) { Вы определяете новую функцию и говорить, что я хочу эту функцию, чтобы принять параметр, называемый «обр [с]», вы Арен» t говоря, что вы хотите передать arr [c], и потому что у вас не может быть никаких специальных символов в имени параметра, вы получите сообщение об ошибке. То, что вы должны сделать, это определить функцию вне цикла, чтобы избежать проблемы с закрытием цикла и передать параметр, позволяющий этой функции создать для вас setTimeout. Пожалуйста, см. JavaScript closure inside loops – simple practical example для получения дополнительной информации о закрытии. Также читайте это, чтобы узнать больше о яваскрипте функций: 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^