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