如果未在我的数组中定义,我需要此代码返回不同的值(从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);
}
答案 0 :(得分: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
控件将不在函数内,即函数内部不再执行代码
阅读 - > What is the scope of variables in 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());
答案 1 :(得分:1)
除了在函数结束时变量超出范围这一事实,正如其他人提到的那样,你的函数没有按照你说的那样去做。如果它生成的第一个数字在数组中,它只会再次尝试生成一个随机数,然后使用该数字而不管它是否在数组中。你需要某种循环来继续尝试新的随机数,直到找到一个肯定不在数组中的随机数。
答案 2 :(得分:0)
n
是其定义的函数的本地,在函数外部定义n
以在函数外部使用它。
答案 3 :(得分:0)
您的n
变量是在函数范围内定义的,因此无法从全局范围访问。
要从函数返回值,请使用以下语法:
return n;
那么你可以在全球范围内做这样的事情:
alert(function(args));
答案 4 :(得分: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
}
答案 5 :(得分: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();
}
}