javascript - 从函数外部访问和更改var的值

时间:2012-02-07 09:45:47

标签: javascript jquery

我可以从函数外部访问和更改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从来没有改变它的值。

4 个答案:

答案 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
});

示例 - http://jsfiddle.net/yyLPE

答案 2 :(得分:1)

在javascript变量范围内定义为函数,您在隐藏外部ArrowFlag的{​​{1}}匿名函数中声明了另一个focusin。您无需再次声明ArrowFlag(使用ArrowFlag),请尝试以下操作:

var

答案 3 :(得分:1)

var在当前上下文中声明一个变量,顶层上下文是DOM窗口。

删除函数中的var以避免在不同的上下文中重新声明同名变量。