Передача локальной переменной с именем глобальной переменной невозможна в JS? - PullRequest
4 голосов
/ 25 августа 2011
foo = "foobar";
var bar = function(){
    var foo = foo || "";
    return foo;
}
bar();`

Этот код дает пустую строку результата.Почему JS не может переназначить локальную переменную с тем же именем, что и глобальная переменная?В других языках программирования ожидаемый результат, конечно, «foobar», почему JS ведет себя так?

Ответы [ 2 ]

25 голосов
/ 25 августа 2011

Это потому, что вы объявили локальную переменную с тем же именем - и она маскирует глобальную переменную.Поэтому, когда вы пишете foo, вы ссылаетесь на локальную переменную.Это верно, даже если вы напишите это перед объявлением этой локальной переменной, переменные в JavaScript являются областью действия.Однако вы можете использовать тот факт, что глобальные переменные являются свойствами глобального объекта (window):

var foo = window.foo || "";

window.foo относится к глобальной переменной здесь.

2 голосов
/ 25 августа 2011

Когда интерпретатор видит var foo, он предполагает, что foo является локальной переменной.Зачем?Ответ прост: потому что именно так был построен этот язык.(и нет, это не единственный язык, который работает таким образом)

...