Просто чтобы добавить к тому, что все остальные говорили о setTimeout
:
Если вы хотите вызвать функцию с параметром в будущем, вам нужно настроить некоторые анонимные вызовы функций.
Вам нужно передать функцию в качестве аргумента, чтобы она вызывалась позже. По сути это означает без скобок за именем. Следующее вызовет предупреждение сразу, и на нем отобразится «Hello world»:
var a = "world";
setTimeout(alert("Hello " + a), 2000);
Чтобы исправить это, вы можете указать имя функции (как это сделал Flubba) или использовать анонимную функцию. Если вам нужно передать параметр, вам нужно использовать анонимную функцию.
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
Но если вы запустите этот код, вы заметите, что через 2 секунды всплывающее окно скажет «Hello Stack Overflow». Это связано с тем, что значение переменной a изменилось за эти две секунды. Чтобы через два секунды он сказал «Hello world», вам нужно использовать следующий фрагмент кода:
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
Он будет ждать 2 секунды, а затем всплывет «Hello world».