0

如果我有一个将偶数添加到数组的简单测试函数:

function isEven(n){
    var enumbers = [];
    if (n % 2 == 0){
        enumbers.push (n);
    }
}

如何增加我的参数,直到我的数组中有一定数量的成员?例如,我试过这个:

function isEven(n){
    var enumbers = [];
    while ( enumbers.length < 10){
    if (n % 2 == 0){
        enumbers.push (n);
    }
    console.log (enumbers);
             n = n + 1;
    isEven(n);
    }
}
isEven(1);

但它似乎只是为每个数字创建一个新数组,直到它最终引发范围错误(超出最大调用堆栈大小)。

4

5 回答 5

2

它多次创建该数组,因为您不断调用该函数:

isEven(n);

您也没有比较数组的长度,只是比较数组。添加.lengthenumbers. 尝试更改为:

var enumbers = [];
while ( enumbers.length < 10){
    if (n % 2 == 0){
        enumbers.push (n);
    }
    console.log (enumbers);
}
于 2013-06-20T19:58:35.527 回答
0

问题是 (enumber < 10) 显然总是计算为真,从而导致无限循环。但是这种比较是错误的,因为您正在将整数与数组进行比较,我认为您正在尝试获取数组长度?:

while (enumbers.length < 10) {

另一件事。enumbers 是一个局部变量,所以每次调用 isEven 都有它自己的数组。因此,函数被递归调用,一遍又一遍。

于 2013-06-20T19:57:10.993 回答
0

我建议你在 is even 方法之外创建数组

于 2013-06-20T20:00:27.337 回答
0

我不确定我是否理解你的问题。但是你不应该使用全局变量,也没有必要在 while 循环中递归地调用你的函数。

错误maximum call stack size exceeded是您的浏览器试图打破无限循环。

这就是你需要的。

这里的例子jsFiddle1jsFiddle2

function isEven(n) {
    var enumbers = [];

    while (enumbers.length < 10) {
        if (n % 2 == 0) {
            enumbers.push(n);
        }
        n++;
    }
    return enumbers;
}

设置测试

var n = 1;
var evenArray = isEven(n); //call isEven function and it returns an array

document.body.innerHTML = evenArray; //2,4,6,8,10,12,14,16,18,20
于 2013-06-20T20:15:05.060 回答
-1

我会写这样的:

function isEven(n,enumbers){  
    while(enumbers < 10){  
        if (n % 2 == 0){  
             enumbers.push (n);  
        }
        console.log (enumbers);  
        n = n + 1;  
        isEven(n, enumbers);  
    }  
}  
var enumbers = [];  
isEven(1,enumbers);
于 2013-06-20T20:00:55.663 回答