0

如果未在我的数组中定义,我需要此代码返回不同的值(从 0 到 14)。我不明白为什么它告诉我“n”没有定义。请帮忙

编辑* **

我修复了 n 值,但我仍然得到包含在我的数组中的数字!

编辑 2 * ** * ***

我需要我的代码返回一个未包含在我的数组中的数值(随机)。这是我正在做的简化版,完整版有非连续值和很多数字!!

function test () {
   var arr= [1,2,3,4,5,6,7,8,9];
   var n = Math.floor((Math.random() * 15));
   var tex = $.inArray( n, arr );
   if (tex == -1) {
       return n;
   }
   else {
       var n = Math.floor((Math.random() * 15));
   }
  alert (n);
}
4

6 回答 6

4
function test () {
   var arr= [1,2,3,4,5,6,7,8,9];
   var n = Math.floor((Math.random() * 15));
   var tex = $.inArray( n, arr );
   if (tex == -1) {
       return n;
   }
   else {
       n = Math.floor((Math.random() * 15)); //no need of declaring n again
   }
   alert (n);//alert should be here inside the function 
}

n在函数测试中定义

所以var n范围仅在函数内部,即n在函数测试之外无法访问

仅当条件失败时,您的代码中的代码alert (n);才会起作用。如果条件变为真,它将returns n 控制将超出函数,即不再执行函数内的代码。

阅读 --> JavaScript 中变量的作用域是什么?

OP评论后更新

演示

function test() {
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var n = Math.floor((Math.random() * 15));
    var tex;
    while ((tex = $.inArray(n, arr)) != -1) {
        n = Math.floor((Math.random() * 15));
    }
    return n;
}
alert(test());
于 2013-09-18T15:27:23.143 回答
1

除了函数结束时变量超出范围这一事实之外,正如其他人所提到的那样,您的函数并没有按照您所说的去做。如果它生成的第一个数字在数组中,它只会再次尝试生成一个随机数,然后使用这个数字,不管它是否在数组中。您需要某种循环来不断尝试新的随机数,直到找到一个绝对不在数组中的随机数。

于 2013-09-18T15:33:04.643 回答
0

n是定义它的函数的本地,在函数n外部定义以在函数外部使用它。

于 2013-09-18T15:27:12.013 回答
0

您的n变量是在函数范围内定义的,因此无法从全局范围内访问。

要从函数返回值,请使用以下语法:

return n;

所以你可以在全局范围内做这样的事情:

alert(function(args));
于 2013-09-18T15:27:52.930 回答
0
function test() {
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var n = Math.floor((Math.random() * 15));
    var tex = $.inArray(n, arr);
    if (tex == -1) {
        return n;
    } else {
        test();
    }
}
于 2013-09-18T16:15:08.077 回答
0

首先你提到你想返回一个值:你为什么要把它变成全局的?

尝试这个:

 function test () {
       var arr= [1,2,3,4,5,6,7,8,9];
       n = Math.floor((Math.random() * 15));
       var tex = $.inArray( n, arr );
       if (tex == -1) {
           return n;
       }
       else {
          n = Math.floor((Math.random() * 15));
       }
return n
    }
于 2013-09-18T15:29:41.593 回答