Почему это замыкание работает?

Скажем, у меня есть простая функция, которая выдает сообщение:

function callMessage(msg){
        alert(msg);
    }

Теперь, когда я вызываю ее таким образом, она не работает. Выдает ошибку «привет не определен»

function sayHi(){
        var hey = "hi there"
        setTimeout("callMessage(hey)", 1000);
    }
    sayHi();

Но когда я вызываю ее внутри анонимной функции, она работает:

function sayHi(){
        var hey = "hi there"
        setTimeout(function(){callMessage(hey);}, 1000);
    }
    sayHi();

Почему переменная «привет» видна только тогда, когда я помещаю ее внутрь анонимной функции?

8
задан levi 1 March 2012 в 15:47
поделиться