Подтвердить что ты не робот

JQuery делает глобальную переменную

Как передать значение функции a_href = $(this).attr('href'); в глобальное a_href, сделать a_href="home"

var a_href; 

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

          console.log(a_href);  
         //output is "home"

        e.preventDefault();
    }

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

Ответ 1

Ваш код выглядит отлично, за исключением того, что если объявление переменной внутри обработчика чтения dom, то это не будет глобальная переменная... это будет переменная закрытия

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 "home"

        e.preventDefault();
    }
})

Чтобы сделать переменную global, одним из решений является объявление переменной в глобальной области

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

          console.log(a_href);  
         //output is "home"

        e.preventDefault();
    }
})

другой должен установить переменную как свойство объекта window

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

Почему консольная печать undefined

Вы получаете вывод как undefined, потому что, хотя переменная объявлена, вы не инициализировали ее значением, значение переменной устанавливается только после того, как элемент a будет нажат до этого времени переменная будет иметь значение undefined. Если вы не объявляете переменную, она выкинет ReferenceError

Ответ 2

установите переменную в окне:

window.a_href = a_href;

Ответ 3

Вы можете избежать объявления глобальных переменных, добавив их непосредственно в глобальный объект:

(function(global) {

  ...

  global.varName = someValue;

  ...

}(this));

Недостатком этого метода является то, что global.varName не будет существовать до тех пор, пока не будет выполнена эта конкретная строка кода, но это можно легко обойти.

Вы также можете рассмотреть архитектуру приложения, в которой такие глобальные переменные содержатся в замыкании, общем для всех функций, которые в них нуждаются, или в качестве свойств соответственно доступного объекта хранения данных.