【问题标题】:when to use var? [duplicate]什么时候使用var? [复制]
【发布时间】:2012-12-16 09:51:09
【问题描述】:

可能重复:
Javascript: is using ‘var’ to declare variables optional?

当我将 var 放在变量之前它不起作用时,如何在下面的代码示例中出现,但是如果我删除 var 它会起作用?我以为你在创建新变量时必须使用 var。

function myfunction () {
    if (document.getElementById('ramyes').checked) {
      var itischecked = "yes"
    } else if (document.getElementById('ramno').checked) {
      var itischecked = "no"
    }
}   



function display () {
  myfunction()

  if (itischecked == "yes") {
    alert ("it sure is");
  } else if (itischecked == "no") {
    alert ("it is not");
  }
}

【问题讨论】:

    标签: javascript variables tags var


    【解决方案1】:

    如果您使用var,则该变量仅在当前函数内部可见(它是一个局部变量)。如果第一次设置变量时不使用var,它会创建一个全局变量,它对所有函数都是可见的。

    仅通过设置全局变量来定义全局变量通常是不受欢迎的,因为大多数时候您需要局部变量(在您的情况下,您应该从函数中返回“itischecked”值,而不是将其存储在全局变量中),并且在没有var 的情况下设置变量看起来像一个错误。这也是严格模式下的错误(每个人都应该始终使用它)。要在(浏览器)JS 中显式定义全局变量,请在全局范围内(在任何函数之外)使用window.variableNamevar

    但在您这样做之前,请仔细考虑这是否是个好主意。您拥有的全局变量越多,当多个脚本使用相同的变量名称时,发生名称冲突的可能性就越大。

    【讨论】:

    • 啊,我明白了!,很好的解释 :) 我想知道为什么我的脚本在我的网站项目上一直返回 undefined,它只是大学的一个小脚本,所以我认为全局变量会很好 :)
    • @Ryan:学校是关于学习的。如果您要学习一些东西,请学会以正确的方式做事......
    【解决方案2】:

    只是添加到建议您不应该创建全局变量的先前答案:为避免这样做,您需要以某种方式扩大范围,以便可以在两个函数之间共享变量。这就是var 的来源。例如:

    function myProgramme() {
        var itischecked;
    
        function myfunction() {
            if (document.getElementById('ramyes').checked) {
                itischecked = "yes"
            }
            else if (document.getElementById('ramno').checked) {
                itischecked = "no"
            }
        }
    
        function display() {
            myfunction()
            if (itischecked == "yes") {
                alert("it sure is");
            }
            else if (itischecked == "no") {
                alert("it is not");
            }
        }
    }​
    

    (尽管在您的具体示例中,您可以更简单地让myfunctionitischecked 传递给display 作为返回值。)

    【讨论】:

      【解决方案3】:

      您应该在创建变量时使用var,但如果您想在两个函数中使用相同的变量,则必须在两个函数之外的范围内创建该变量:

      var itischecked;
      
      function myfunction () {
        if(document.getElementById('ramyes').checked) {
          itischecked = "yes"
        } else if(document.getElementById('ramno').checked) {
          itischecked = "no"
        }
      }   
      
      function display () {
        myfunction();
        if (itischecked == "yes") {
          alert ("it sure is");
        } else if (itischecked == "no") {
          alert ("it is not");
        }
      }
      

      如果您在函数内创建变量,则该变量将成为局部变量。它仅在该函数内部可见,并在您从该函数返回时消失。


      在您的情况下,您应该使用函数的返回值,而不是将值放入变量中。这样更容易跟踪数据在程序中的流动方式,并且您无需创建全局变量:

      function myfunction () {
        if(document.getElementById('ramyes').checked) {
          return "yes"
        } else if(document.getElementById('ramno').checked) {
          return "no"
        }
      }   
      
      function display () {
        var itischecked = myfunction();
        if (itischecked == "yes") {
          alert ("it sure is");
        } else if (itischecked == "no") {
          alert ("it is not");
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-12
        • 2011-10-16
        • 2011-02-20
        • 2010-09-11
        • 1970-01-01
        • 2019-04-13
        • 1970-01-01
        • 2014-04-29
        • 2013-10-19
        相关资源
        最近更新 更多