Когда вы это сделаете:
scope = 'global'
function t() {
alert(scope) // global
}
t()
на линии scope
вы говорите js: смотрите, я определяю «область» в этой функции . Таким образом, JS сбрасывает значение (область). Это как если бы вы сделали:
t
Но если вы просто сделаете
var scope == ...
Вы не создаете переменную scope
в своей функции, поэтому JS не стирает ее значение, и когда вы пытаетесь получить к ней доступ, JS пытается найти ее выше (в этом случае в глобальном пространстве имен)
Надеюсь, вы его получите ... Это действительно немного странно, потому что сначала JS ищет каждую переменную, которую вы объявляете в своей функции (и перезагружаете / инициализируете их), а затем запускаете свою функцию.
Matt