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;