Рассмотрим следующий код JavaScript:
(function(){
foo();
function foo(){ alert('Hello, World!'); }
})();
В Firefox, Opera и Chrome это ведет себя как ожидалось;мы получаем предупреждение.В отличие от этого:
(function(){
if (true){
foo();
function foo(){ alert('Hello, World!'); }
}
})();
Firefox 3.6 и 4 (бета) (то есть SpiderMonkey для обоих) выдает исключение: foo не определено
Chrome (т.е. V8) и Opera (то есть что угоднодвижок Opera использует) работает как положено (мной).
Какое поведение правильно, или это оставлено на усмотрение реализаций?
FWIW, снова оберните его в функцию, и этохорошо снова пойти в ФФ:
(function(){
if (true){
(function(){
foo();
function foo(){ alert('Hello, World!'); }
})();
}
})();