【问题标题】:When is "var" needed in js? [duplicate]js中什么时候需要“var”? [复制]
【发布时间】:2011-10-16 10:07:04
【问题描述】:

可能重复:
Difference between using var and not using var in JavaScript

有时,我看到有人这样做

for(var i=0; i< array.length; i++){
 //bababa

}

但我也看到有人这样做......

for(i=0; i< array.length; i++){
 //bababa

}

两者有什么不同?谢谢你。

【问题讨论】:

    标签: javascript var


    【解决方案1】:

    从技术上讲,您永远不必使用它,javascript 会愉快地进行 - 使用您的变量,即使您没有提前声明它们。

    但是,实际上,在声明变量时应该始终使用它。它将使您的代码更具可读性并帮助您避免混淆,尤其是当您使用具有相同名称和不同范围的变量时...

    var n = 23;
    function functThat( )
    {
       var n = 32; // "local" scope
    }
    

    【讨论】:

    • 想解释否决票?
    • 我没有投反对票,但我的猜测是因为这些陈述都是错误的。您真的不希望全局变量弹出并随机更改。是的,弗吉尼亚,Javascript 真的很烂。但是为了帮助减轻您在任何地方使用 var 以减少代码错误的情况。与可读性无关。
    • 问题询问使用 var 和不使用 var 之间的区别是什么,但这个答案只是给出了何时使用它的建议,而没有解释实际的区别是什么。
    【解决方案2】:

    var 关键字从不“需要”。但是,如果您不使用它,那么您声明的变量将在全局范围内公开(即作为window 对象的属性)。通常这不是你想要的。

    通常您只希望您的变量在当前范围内可见,这就是 var 为您所做的。它仅在当前范围内声明变量(但请注意,在某些情况下,“当前范围”将与“全局范围”一致,在这种情况下,使用 var 和不使用 var 没有区别)。

    在编写代码时,您应该更喜欢这种语法:

    for(var i=0; i< array.length; i++){
        //bababa
    }
    

    或者如果你必须,那么像这样:

    var i;
    for(i=0; i< array.length; i++){
       //bababa
    }
    

    这样做:

    for(i=0; i< array.length; i++){
       //bababa
    }
    

    ...将在全局范围内创建一个名为i 的变量。如果其他人碰巧也在使用全局 i 变量,那么您只是覆盖了他们的变量。

    【讨论】:

    • 嗨,在您的示例中,您是否必须在其他地方注册全局变量 I 才能将其声明为全局范围,或者是否任何未使用 var 声明的内容都被 javascript 引擎隐式理解为全局变量?
    • @Chin - 任何没有用var声明的东西都会被隐式理解为JavaScript中的全局变量,不需要特殊注册。
    • 感谢@aroth 的好建议。将变量保存在本地也有助于我在 Google chrome 中调试时轻松浏览代码。
    猜你喜欢
    • 2011-09-12
    • 2012-12-16
    • 1970-01-01
    • 2012-09-16
    • 2011-12-16
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多