2012-03-08 15 views
6

¿Las variables definidas dentro de una función interna tienen el mismo nombre que una variable en una función externa aislada de la variable externa?Cierres JavaScript y cloqueo de nombres

function() { 
    var myTest = "hi there"; 
    (function(myTest) { 
     myTest = "goodbye!"; 
    })(); 
    console.log(myTest); // myTest should still be "hi there" here, correct? 
} 

Naturalmente si no lo hacía declaranmyTest dentro de la función interna que crearía un cierre y modificar el original. Solo quiero asegurarme de que las variables declaradas dentro de una función interna estén siempre aisladas a esa función, incluso si su nombre puede entrar en conflicto con un ámbito externo.

Respuesta

11

Sí, efectivamente lo hacen. Cada función crea un nuevo ámbito, y el ámbito más cercano en el que se declara una variable solicitada siempre tiene prioridad. No hay excepciones. *


* indirecta eval

+0

Por "usado" supongo que te refieres "declarada" correcta? – devios1

+0

@chaiguy: Sí, lo siento. Mezclé mis palabras allí un poco. – Ryan

+0

este método también evita la búsqueda de ámbito. –

1

Sólo por el bien de la integridad. En estos ejemplos muy similares, esto es lo que sucede con ningún parámetro

var x = 'a'; 
(function() { //note that there is no parameter here 
    x = 'b'; 
    alert('inner:'+x); //b 
})(); 
alert('outer:'+x); //b 

y una var con el mismo nombre

var x = 'a'; 
(function() { 
    var x = 'b'; 
    alert('inner:'+x); //b 
})(); 
alert('outer:'+x); //a