我正在通过制作项目来学习javascript。我无法理解全局变量。在此示例中,当我为variable = result;
函数分配randomvariable()
ub时,在test()
函数的switch参数上,它不起作用
function randomvariable () {
var myarray = new Array;
myarray = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
randomvariable = Math.floor(Math.random() * 0);
result = (myarray[randomvariable]);
}
function test() {
switch (result) {
case 0:
alert("haahhaha");
break;
}
}
答案 0 :(得分:2)
在JavaScript中,当您在函数中声明一个带var
的变量时,该变量只能从该函数访问。如果您没有使用var
声明变量,它将(默认情况下)变为全局变量,并且可以从任何位置访问。这是一种不好的做法,应该避免。应始终明确声明变量,以避免混淆。
现在,问题是必须执行包含变量范围变量的函数才能生效。在您的情况下,您实际上从未执行randomvariable
函数,因此永远不会执行result = ...
并且不会创建全局变量。此外,您永远不会调用test
函数。
此外,您将函数的randomevariable
值重新分配给随机计算的结果。这不是你应该做的。相反,您可以使用结果函数return
或仅让函数设置变量。
// Declare result in the Global scope
var result = null;
function randomvariable () {
var myarray = new Array;
myarray = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
// This is the correct code for getting one of the array values randomly,
// but we'll comment it out here so that we can force the value of 0 for
// testing purposes
//result = (myarray[Math.floor(Math.random() * myarray.length)]);
result = 0;
}
function test() {
// Generate the random number by invoking the function that does that work
randomvariable();
// Now, the global has a value assigned to it
console.log(result);
switch (result) {
case 0:
alert("haahhaha");
break;
}
}
// Now, invoke test to get the whole thing working
test();
说完所有这些之后,应该避免使用全局变量,因为它们会产生与同一范围内存在的其他变量发生冲突的可能性。始终尝试为变量提供允许代码运行的最小范围。 Globals是臭虫的臭名昭着的来源。