2013-08-04 3 views
-4

Так что я делаю функцию, которая должна быть задержана, и мне нужно старое значение не новыйSetTimeout дает мне новую переменную не старый

test='old'; 

setTimeout(function(test) {alert(test)}, 1000,[test]); 

test='new'; 
+4

Если вы хотите решить проблему, пожалуйста, задайте правильный вопрос и предоставьте правильное решение. –

+0

Что касается передачи дополнительных аргументов для обратного вызова таймаута, см. Этот абзац в [документации MDN] (https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout): * «Обратите внимание, что передача дополнительные параметры функции в первом синтаксисе не работают в Internet Explorer. Если вы хотите включить эту функцию в этом браузере, вы должны использовать код совместимости (см. [Параметры обратного вызова] (https://developer.mozilla.org/ en-US/docs/Web/API/window.setTimeout # Callback_arguments). * * –

+0

Возможный дубликат [Как работают блокировки JavaScript?] (http://stackoverflow.com/questions/111102/how-do- JavaScript-укупорочные работа) –

ответ

2

общее решение, которое не зависит от setTimeout ' s способность передать аргументы функции обратного вызова (который не работает в IE, как описано в MDN documentation), является использование IIFE, чтобы создать новую область и захватить текущее значение переменной:

test='old'; 

(function(test) { 
    setTimeout(function() { 
     alert(test) 
    }, 1000); 
}(test)); 

test='new'; 

это работает для любого типа llback. См. Также JavaScript closure inside loops – simple practical example.

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