关于javascript:何时使用var?

when to use var?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Javascript: is using ‘var’ to declare variables optional?

如果我把var放在变量之前它不起作用,下面这个代码示例怎么样,但是如果我删除var它有效吗? 我认为你在创建新变量时必须使用var。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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");
  }
}

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

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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");
  }
}

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

在您的情况下,您应该使用函数的返回值,而不是将值放在变量中。这样就可以更容易地了解数据在程序中的流动方式,而且您不需要创建全局变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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");
  }
}


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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");
        }
    }
}?

(虽然在您的具体示例中,您可以更简单地将myfunction传递itischeckeddisplay作为返回值。)