Firefox interpreta las declaraciones de función de manera diferente y aparentemente rompieron el levantamiento de declaración para la declaración de función. (A good read about named functions/declaration vs expression)
¿Por qué interpretan de manera diferente Firefox declaraciones es debido al código siguiente:
if (true) {
function test(){alert("YAY");}
} else {
function test(){alert("FAIL");}
}
test(); // should alert FAIL
Debido a la elevación de declaración, la función test
debe siempre alerta "a prueba", pero no en Firefox. El código anterior en realidad alerta a "YAY" en Firefox y sospecho que el código que hace que eso suceda finalmente rompió la declaración por completo.
Supongo que Firefox convierte declaraciones de funciones en declaraciones de var cuando se encuentran en declaraciones if/else o try/catch. De este modo:
// firefox interpretted code
var test; // hoisted
if (true) {
test = function(){alert("yay")}
} else {
test = function(){alert("fail")}
}
Después de un breve debate con Šime Vidas, tengo que decir que el trato de Firefox con la declaración de funciones no es estándar, debido a:
The production SourceElement : Statement is processed for function declarations by taking no action.
The production SourceElement : Statement is evaluated as follows:
- Evaluate Statement.
- Return Result(1).
Tanto FunctionDeclaration y Estado son SourceElements, ergo, no debería haber FunctionDeclarations dentro de un enunciado (if/else, try/catch). ¡Dale a Šime Vidas un brownie!
Try/catch es básicamente otra forma de if/else y probablemente use el mismo código de excepción.
en qué navegador se encuentra? –
De acuerdo; no funciona (Firefox), pero la pregunta que haré es ¿por qué necesitas esto? ¿Por qué necesita poner declaraciones de funciones dentro de un bloque try/catch? – Spudley
Firefox. Ahora veo que IE y Chrome muestran Hola mundo ... –