Поскольку при передаче строки в setTimeout
код внутри нее будет выполняться в глобальной области видимости во время ожидания. Код в глобальной области не имеет доступа ни к одной из локальных переменных, присутствующих во время вызова setTimeout
.
Не передавайте строку в setTimeout
, она неизменно отстой (в основном это отложенный eval
, а мы все ненавидим eval
, а? Вместо этого используйте Function
объект:
setTimeout(clock, 1000);
Вы также можете использовать встроенное выражение функции для создания своей функции, например:
setTimeout(function() {
var nd= new Date();
...
}, 1000);