2

可能重复:
Javascript:是否使用“var”来声明变量是可选的?

当我将 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");
  }
}
4

3 回答 3

12

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

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

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

于 2013-01-01T23:12:25.693 回答
1

您应该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");
  }
}
于 2013-01-01T23:25:07.637 回答
0

只是添加到建议您不应该创建全局变量的先前答案:为避免这样做,您需要以某种方式创建更大的范围,以便可以在两个函数之间共享变量。这就是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");
        }
    }
}​

(尽管在您的具体示例中,您可以更简单地myfunctionitischeckedtodisplay作为返回值。)

于 2013-01-01T23:23:23.103 回答