Некоторые ответы правильные, но запутанные.
Я отвечаю на это еще раз, 4 года спустя, потому что я все еще сталкиваюсь с чрезмерно сложным кодом, чтобы решить именно этот вопрос.
Прежде всего, не передавайте строку в качестве первого параметра при вызове setTimeout, потому что он эффективно вызывает вызов медленной функции «eval».
Итак, как мы передаем параметр функции таймаута? Используя закрытие:
settopic=function(topicid){
setTimeout(function(){
//thanks to closure, topicid is visible here
postinsql(topicid);
},4000);
}
...
if (xhr.readyState==4){
settopic(xhr.responseText);
}
Некоторые предложили использовать анонимную функцию при вызове функции таймаута:
if (xhr.readyState==4){
setTimeout(function(){
settopic(xhr.responseText);
},4000);
}
Синтаксис работает. Но к тому времени, когда вызывается оконечное устройство, т. Е. Через 4 секунды, объект XHR может быть не таким. Поэтому важно предварительно привязать переменные .