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