Los ECMAScript 5 spec indica lo siguiente:JavaScript alcance cláusula catch
lo general, un entorno léxico se asocia con algunos estructura sintáctica específica de código ECMAScript tal como un FunctionDeclaration, un WithStatement, o una cláusula de captura de un TryStatement y un nuevo léxico Medio Ambiente se crea cada vez que se evalúa dicho código.
Si mi interpretación es correcta, entonces cuando se crea un nuevo entorno léxico en JavaScript, se introduce un nuevo ámbito, por lo que las variables declaradas dentro de una función no son visibles fuera de esa función:
function example() {
var x = 10;
console.log(x); //10
}
console.log(x); //ReferenceError
Así que en la declaración de la función anterior, se crea un nuevo entorno léxico, lo que significa x
no está disponible en todos los ambientes exteriores léxicas que puedan existir.
Así que la parte de la cita anterior sobre las declaraciones de funciones parece tener sentido. Sin embargo, también afirma que se crea un nuevo entorno léxico de la cláusula de captura de una sentencia try:
try {
console.log(y); //ReferenceError so we enter catch
}
catch(e) {
var x = 10;
console.log(x); //10
}
console.log(x); //10 - but why is x in scope?
Entonces, ¿cómo el alcance de una obra catch
bloque? ¿Tengo un malentendido fundamental de lo que es un entorno léxico?
Esta publicación de SO está relacionada de alguna manera: http://stackoverflow.com/questions/6100230/javascript-catch-parameter-already-defined – Juri