Прежде чем я начну, я понимаю, что спецификация скрипта ECMA, вероятно, ответит на мой вопрос, но я задаю его на SO в надежде на приемлемый ответ.
Возьмите следующий код:
function test1(param) {
alert(param);
}
function test2() {
var testvar = 99;
setTimeout(function(){ test1(testvar); }, 1000);
}
test2();
Если я запускаю этот код, я получаю всплывающее окно, отображающее 99. Мой вопрос в test2
, не должен ли testvar
быть нулевым после завершения test2
?Как анонимная функция в setTimeout
получает значение testvar
?Есть ли какое-то копирование стека, происходящее правильно, когда вызывается setTimeout?