Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Определение переменной внутри функции


Автор: namata 2.11.2007, 19:32
Код

function test(word)
    {
         setTimeout("say(word)", 1000);
    }
function say(word)
    {
         alert(word);
    }
test('hello');


Объясните, пожалуйста, почему это вызывает ошибку "word - определение отсутствует" и как будет выглядеть код правильно. Спасибо.

Автор: xvr 2.11.2007, 19:43
Цитата(namata @ 2.11.2007,  19:32)
Код

function test(word)
    {
         setTimeout("say(word)", 1000);
    }
function say(word)
    {
         alert(word);
    }
test('hello');


Объясните, пожалуйста, почему это вызывает ошибку "word - определение отсутствует" и как будет выглядеть код правильно. Спасибо.

Ошибку это вызывает потому, что функция setTimeout сделает eval от своего первого параметра через 1 сек. в ГЛОБАЛЬНОМ контексте, а не в том контексте, где стоит ее вызов. В глобальном контексте никаких переменных word нет. Если у тебя версия IE >=5, то можно сделать так
Код

function test(word)
    {
         setTimeout(function () {say(word)}, 1000);
    }
function say(word)
    {
         alert(word);
    }
test('hello');

Автор: namata 2.11.2007, 20:38
Спасибо. Все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)