tutorial script español ejemplos definicion curso caracteristicas javascript jquery scope closures

español - ¿Cómo puedo acceder a variables fuera del alcance actual en javascript?



javascript pdf (2)

Estoy escribiendo una aplicación en javascript y no puedo entender cómo acceder a las variables declaradas en mi función, dentro de este jquery parse. En el interior puedo acceder a variables globales, pero realmente no quiero crear valores globales para estos valores.

Básicamente quiero extraer nombres de archivo de un documento xml en la variable simulationFiles . Compruebo si el atributo del nodo es igual al simName y simName las dos cadenas dentro de los elementos xml, esa parte creo que está funcionando.

¿Cómo puedo extraer esos elementos xml y anexarlos a las variables locales?

function CsvReader(simName) { this.initFileName = "somepath"; this.eventsFileName = "somepath"; $(simulationFiles).find(''simulation'').each(function() { if ($(this).attr("name") == simName) { initFileName += $(this).find("init").text(); eventsFileName += $(this).find("events").text(); } }); }


Hice una demostración en funcionamiento (la cambié para usar clases, así que funcionaría con HTML).

function CsvReader(simName) { this.initFileName = "somepath"; this.eventsFileName = "somepath"; var context = this; $(simulationFiles).find(''simulation'').each(function() { if ($(this).attr("name") == simName) { context.initFileName += $(this).find("init").text(); context.eventsFileName += $(this).find("events").text(); } }); }


this en la función CsvReader no es lo mismo que en la devolución de llamada de each() (en cambio, es el elemento actual en la iteración). Para acceder al alcance de la función externa dentro de la devolución de llamada, necesitamos poder hacer referencia a ella por otro nombre, que puede definir en el ámbito externo:

function CsvReader(simName) { this.initFileName = "somepath"; this.eventsFileName = "somepath"; var self = this; // reference to this in current scope $(simulationFiles).find(''simulation'').each(function() { if ($(this).attr("name") == simName) { // access the variables using self instead of this self.initFileName += $(this).find("init").text(); self.eventsFileName += $(this).find("events").text(); } }); }