¿Cómo puedo hacer una variable global con jQuery?

2 minutos de lectura

avatar de usuario de olo
hola

Cómo pasar la función a_href = $(this).attr('href'); valor a nivel mundial a_hrefhacer a_href="https://stackoverflow.com/questions/18995647/home"

var a_href; 

    $('sth a').on('click', function(e){
        a_href = $(this).attr('href');

          console.log(a_href);  
         //output is "https://stackoverflow.com/questions/18995647/home"

        e.preventDefault();
    }

console.log(a_href);  
//Output is undefined 

  • el único problema es si el var a_href está dentro de un controlador dom ready… la declaración de la variable debe estar en el espacio global o usar window.a_href = $(this).attr('href')

    – Arun P Johny

    25 de septiembre de 2013 a las 3:23


Avatar de usuario de Arun P Johny
Arun P Johny

Su código se ve bien, excepto por la posibilidad de que si la declaración de la variable está dentro de un controlador de lectura dom, entonces no será una variable global … será una variable de cierre

jQuery(function(){
    //here it is a closure variable
    var a_href;
    $('sth a').on('click', function(e){
        a_href = $(this).attr('href');

          console.log(a_href);  
         //output is "https://stackoverflow.com/questions/18995647/home"

        e.preventDefault();
    }
})

Para hacer que la variable sea global, una solución es declarar la variable en alcance global

var a_href;
jQuery(function(){
    $('sth a').on('click', function(e){
        a_href = $(this).attr('href');

          console.log(a_href);  
         //output is "https://stackoverflow.com/questions/18995647/home"

        e.preventDefault();
    }
})

otra es establecer la variable como una propiedad del objeto ventana

window.a_href = $(this).attr('href')

¿Por qué la impresión de la consola undefined?

Estás obteniendo la salida como undefined porque a pesar de que la variable está declarada, no la ha inicializado con un valor, el valor de la variable se establece solo después de la a se hace clic en el elemento hasta ese momento la variable tendrá el valor undefined. Si no está declarando la variable, arrojará un Error de referencia

  • Muchas gracias, lo marcaré 🙂

    – hola

    25 de septiembre de 2013 a las 3:33

establecer la variable en la ventana:

window.a_href = a_href;

Avatar de usuario de RobG
robar

Puede evitar la declaración de variables globales agregándolas directamente al objeto global:

(function(global) {

  ...

  global.varName = someValue;

  ...

}(this));

Una desventaja de este método es que global.varName no existirá hasta que se ejecute esa línea específica de código, pero se puede solucionar fácilmente.

También puede considerar una arquitectura de aplicación en la que dichos elementos globales se mantengan en un cierre común a todas las funciones que los necesitan, o como propiedades de un objeto de almacenamiento de datos adecuadamente accesible.

¿Ha sido útil esta solución?