从全局变量访问switch语句参数值

时间:2017-02-17 21:45:56

标签: javascript function switch-statement

我正在通过制作项目来学习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; 
    }   
}

1 个答案:

答案 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是臭虫的臭名昭着的来源。