Acceder a una variable de document.ready desde fuera del mismo

publicado por: Anonymous

Buenas, tengo una variable nombre dentro del document.ready a la que quiero acceder desde fuera de document.ready pero no puedo. Si declaro la variable fuera del document.ready, cuando le asigno algún valor dentro del document.ready, este se pierde cuando salgo.

He leido que si declaras la variable desde fuera de la función, esta se hace global y se puede acceder desde todo el documento pero algo estoy haciendo mal.

Pongo la variable nombre como ejemplo.

        $(document).ready(function(){
         url = new URL(location.href); //Mediante esta propiedad accedemos a la dirección URL completa de la página mostrada en una ventana
            datos = JSON.parse(url.searchParams.get('objJson')); //Hacemos el proeso inverso, convertimos el string enviado a objeto Json
                //La propiedad searchParams de la interfaz URL devuelve un objeto URLSearchParams que permite el acceso a los argumentos de consulta GET contenidos en la URL.
                for(var i = 0; i < datos.length; i++){
                    //alert(datos[i].api_key);
                }
            nombre="adios";

            }); 

        alert(nombre);

solución

Me parece que te estás liando un poco. El problema de tu código no es que no puedas acceder a la variable nombre desde fuera de la función definida en el método $(document).ready, si no que cuando accedes a la variable nombre todavía no se ha inicializado por lo que no tiene ningún valor.

Si utilizas una variable sin declararla previamente con una instrucción var javascript generar una variable en el contexto global de manera automática que puede ser accedida desde cualquier parte de tu código. Esto no es una buena práctica pero funciona. Si lo que quieres es definir una variable global es preferible que la declares expresamente en este contexto.

En tu código el problema es que la función de $(document).ready no se ejecuta hasta que finaliza la carga de la página, mientras que alert(nombre); se ejecuta de forma inmediata según se interpreta el código con lo que se ejecuta antes de que se haya asignado ningún valor a la variable.

Si creas, fuera del contexto de $(document).ready una función que acceda al valor nombre y la ejecutas después de que se haya ejecutado el código que inicializa la variable verás que puedes acceder a su contenido sin problemas.

Mira este ejemplo. El primer console.log mostrará el valor undefined porque se ejecuta antes de que se inicialice la variable. El de la función mostrarNombre mostrará el valor de la variable una vez inicializada:

_x000D_

_x000D_

// Declaración global para que sea accesible desde todo el código_x000D_
var nombre;_x000D_
_x000D_
// Código que se ejecuta una vez que se haya finalizado la carga de la página_x000D_
$(document).ready(function(){_x000D_
  var url = new URL(location.href);_x000D_
  var datos = JSON.parse(url.searchParams.get('objJson'));_x000D_
_x000D_
  // ....._x000D_
  _x000D_
  // Inicializamos la variable_x000D_
  nombre="adios";_x000D_
  _x000D_
  // Una vez inicializado llamamos a mostrarNombre_x000D_
  mostrarNombre();_x000D_
}); _x000D_
_x000D_
// Este código se ejecuta antes de finalizar la carga de la página por lo que nombre es 'undefined'_x000D_
console.log('Valor antes de inicializar: ' + nombre);_x000D_
_x000D_
// Función que muestra el valor de nombre_x000D_
function mostrarNombre(){_x000D_
  console.log('Valor desde mostrarNombre: ' + nombre);_x000D_
}

_x000D_

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

_x000D_

_x000D_

_x000D_

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *