我可以从函数外部访问和更改var
的值吗?
var ArrowFlag = "1";
$('input, textarea, select').focusin( function() {
var ArrowFlag = "0";
//console.log(ArrowFlag) will = 0
});
$(document).bind('keyup', function() {
// When input:focus console.log(ArrowFlag) will = 1
});
当您有input:focus
个事件时,var ArrowFlag
的值应为0
。
但是,如果keyUp
之后您有input:focus
个事件,那么ArrowFlag值将为1
。为什么?看起来我的var ArrowFlag
从来没有改变它的值。
答案 0 :(得分:3)
这完全是关于变量范围的。
从var ArrowFlag = "0"
中删除“var”,然后阅读http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/或其中一个other articles中的一个 - 你会很高兴你做到了。
答案 1 :(得分:1)
您已经定义了两个名为ArrowFlag
的独立变量,如果您希望它们是同一个变量,请从focusin回调中的变量中删除var:
var ArrowFlag = "1";
$('input, textarea, select').focusin( function() {
ArrowFlag = "0";
//console.log(ArrowFlag) will = 0
});
$(document).bind('keyup', function() {
// after focusin ArrowFlag will now be 0
});
答案 2 :(得分:1)
在javascript变量范围内定义为函数,您在隐藏外部ArrowFlag
的{{1}}匿名函数中声明了另一个focusin
。您无需再次声明ArrowFlag
(使用ArrowFlag
),请尝试以下操作:
var
答案 3 :(得分:1)
var
在当前上下文中声明一个变量,顶层上下文是DOM窗口。
删除函数中的var
以避免在不同的上下文中重新声明同名变量。