Исходный код автора не разрешен стандартом ECMAScript.(ECMAScript официальное название для спецификации языка JavaScript, по юридическим причинам.) Однако это общее расширение языка, которое, к сожалению, по-разному реализовано в разных браузерах.
В стандартном JavaScript,определения функций могут встречаться только в коде верхнего уровня или на верхнем уровне тела функции.Вы не можете иметь условные выражения, циклы или даже фигурные скобки между телом включающей функции и определением функции.
Например, это разрешено:
function f() {
function g() {
...
}
}
, но это не так:
function f() {
{
function g() {
...
}
}
}
Что усложняет картину, так это то, что большинство браузеров делают принимают этот последний код, но каждый присваивает ему свою особую интерпретацию.Firefox рассматривает это следующим образом:
function f() {
{
var g = function g() {
...
}
}
}
Комитет ECMAScript рассматривает возможность выбора конкретной интерпретации для этих «операторов функций» (в отличие от определений функций).Они еще не приняли решение.Mozilla обсуждает свое предпочтительное решение здесь .