Я столкнулся с очень странным (мне) проблема с var
ключевое слово. Я уменьшил его до довольно минимального тестового сценария и нашел, что это показано в Node.js (таким образом, V8 и Chrome), Safari 4 инспектор (таким образом, Нитро), и FireBug (очевидно, SpiderMonkey). Я первоначально готовил отчет об ошибках, но так как он так широко отображен, я собираюсь предположить, что я полностью неправильно понимаю, как JavaScript, как предполагается, определяет объем и ищет переменные.
Тестовый сценарий является очень небольшим, и на GitHub здесь: http://gist.github.com/260067. Единственной разницей между первым и вторым примером является включение var
ключевое слово.
Здесь, также, подобный тестовый сценарий, который показывает ту же 'проблему' по-другому: https://gist.github.com/698b977ee0de2f0ee54a
Править: Для устранения больше ответов, пытающихся объяснить, как расположение каскадом определяет объем работ, я глубоко знаком с этим. Моя проблема, то, что я не понимаю, почему следующий код 'работает' (в этом это alert()
s 'внешний', сопровождаемый 'внутренним', и с другой стороны 'внешний'):
(function(){
var foo = 'outer';
alert("Outer `foo`: " + foo);
(function(){
foo = 'inner';
alert("Inner `foo`: " + foo);
var foo;
})();
alert("Outer `foo`: " + foo);
})();
var foo;
происходит в абсолютно несоответствующем положении с re‐assignment foo
; итак, почему это влияет на то присвоение очень существенным способом?