可能重复:
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");
}
}
答案 0 :(得分:12)
如果使用var
,则变量仅在当前函数内可见(它是局部变量)。如果您在首次设置变量时未使用var
,则会创建一个全局变量,该变量对所有函数都可见。
通过设置全局变量来定义全局变量通常是不受欢迎的,因为大多数时候你需要局部变量(在你的情况下你应该从函数返回你的“itischecked”值,而不是将它存储在全局变量中),以及设置一个没有var
的变量看起来像是一个错误。在严格模式下也是一个错误(每个人都应该使用,总是如此)。要在(浏览器)JS中显式定义全局变量,请在全局范围内使用window.variableName
或var
(在任何函数之外)。
但在你这样做之前,请仔细考虑这是否是个好主意。您拥有的全局变量越多,当多个脚本使用相同的变量名称时,您获得名称冲突的可能性就越大。
答案 1 :(得分: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");
}
}
答案 2 :(得分: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");
}
}
}
(尽管在您的具体示例中,您可以更简单地myfunction
将itischecked
传递给display
作为返回值。)