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 

你的代码看起来很好,除了如果变量声明在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(); } }) 

要使变量成为全局变量,一种解决方案是在全局范围内声明变量

 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.a_href = $(this).attr('href') 

为什么控制台打印未定义

您将输出视为undefined因为即使声明了变量,您也没有使用值初始化它,只有在单击a元素之后才设置变量的值,直到该变量将具有undefined的值。 如果您没有声明变量,它将抛出一个ReferenceError

您可以通过将全局变量直接添加到全局变量来避免声明全局变量:

 (function(global) { ... global.varName = someValue; ... }(this)); 

这种方法的一个缺点是,在执行该行代码之前, globa.varName将不存在,但这可以很容易地解决。

您还可以考虑一种应用程序体系结构,其中此类全局变量保存在所有需要它们的函数的公共闭包中,或者作为适当可访问的数据存储对象的属性。

在窗口上设置变量:

 window.a_href = a_href;