Так что я делаю функцию, которая должна быть задержана, и мне нужно старое значение не новыйSetTimeout дает мне новую переменную не старый
test='old';
setTimeout(function(test) {alert(test)}, 1000,[test]);
test='new';
Так что я делаю функцию, которая должна быть задержана, и мне нужно старое значение не новыйSetTimeout дает мне новую переменную не старый
test='old';
setTimeout(function(test) {alert(test)}, 1000,[test]);
test='new';
общее решение, которое не зависит от 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.
Если вы хотите решить проблему, пожалуйста, задайте правильный вопрос и предоставьте правильное решение. –
Что касается передачи дополнительных аргументов для обратного вызова таймаута, см. Этот абзац в [документации 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). * * –
Возможный дубликат [Как работают блокировки JavaScript?] (http://stackoverflow.com/questions/111102/how-do- JavaScript-укупорочные работа) –