如何将函数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
答案 0 :(得分:33)
你的代码看起来很好,除非变量声明在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
答案 1 :(得分:3)
在窗口上设置变量:
window.a_href = a_href;
答案 2 :(得分:3)
您可以通过将全局变量直接添加到全局变量来避免声明全局变量:
(function(global) {
...
global.varName = someValue;
...
}(this));
此方法的一个缺点是 global.varName 在执行该特定代码行之前不会存在,但可以轻松解决。
您可能还会考虑一种应用程序体系结构,其中此类全局变量保存在所有需要它们的函数的公共闭包中,或者作为适当可访问的数据存储对象的属性。