2009-09-21 4 views
1

я сталкивался следующий любопытный фрагмент кода:сфера в JavaScript

function foo(){ 
    works = {hello:"world"}; 
    function bar(){ 
     alert('does not work'); 
    } 
    var notwork = {hello:"world"}; 
} 
foo(); 
alert(works.hello); 
alert(notwork.hello); 

Может кто-то пожалуйста, объясните мне, почему работает работу, и notwork не работает? Или укажите мне хороший ресурс, который объясняет это подробно.

спасибо!

ответ

11

var notwork создает локальную переменную, действительную только для времени выполнения функции.

works создает глобальную переменную, которая действительна во время работы javascript.

+3

Нет. Локальные переменные очень актуальны после выполнения функции. Вот почему ** Javascript имеет закрытие **. – kangax

+0

Насколько я согласен, в этом примере переменная НЕ ДОЛЖНА после выполнения функции. Поправьте меня, если я ошибаюсь, спасибо! –

2

Вы пропустили ключевое слово var, так чтоопределяется на глобальном объекте.

Вы хотите

var works = ... 
3

var объявляет переменную как «локальный» в функции она определена в

Без var, вы works переменная глобальна:. Можно увидеть/доступ к б/у из в любом месте.

С var ваша notwork переменная является локальной для функции foo: ее нельзя увидеть/использовать из-за пределов этой функции.


Для получения дополнительной информации, Вы можете посмотреть на документации var statement on MDC, в котором говорится (цитирую):

Область действия переменной является текущей функция или, для переменных объявленный вне функции, текущий приложение.

Использование var вне функции факультативно; присваивая значение необъявленной переменной неявно объявляет ее как глобальную переменную.
Тем не менее, рекомендуется всегда использования var, и необходимо в пределах функций в следующих случаях:

  • Если переменная в объеме, содержащем функцию (в том числе глобальной объема) имеет то же самое имя.
  • Если рекурсивные или множественные функции используют переменные с тем же именем, а предполагают, что эти переменные являются локальными.

Неспособность объявить переменную в этих случаях будет очень вероятно, приведет к неожиданным результатам.

Смежные вопросы