You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript报错TypeError: a is not iterable及数组传参问题咨询

问题分析与解决

错误原因

你遇到的TypeError: a is not iterable核心问题是函数参数的作用域:

  • 你提前声明的const a = [1,2,...]是全局变量,但函数oddNum(a)里的a是函数的局部参数——这俩是完全独立的变量,名字一样但互不影响。
  • 当你调用oddNum()时没传参数,函数内部的a会默认变成undefined,而for...of循环只能遍历数组这类可迭代对象,undefined不满足要求,所以报错。
  • 调用evenNum([1,2,...])时传了数组,函数内部的a就指向你传入的数组,自然能正常运行。

修正方案

方案1:调用函数时传入全局数组(推荐)

直接在调用oddNum时把全局的a传进去,和evenNum的调用逻辑保持一致:

const a= [1,2,3,4,5,6,7,8,9,10];
function evenNum (a){
    for (let element of a){
        if (element%2===0){
            console.log(element);
        }
    }
};

function oddNum (a){
    for (let element of a){
        if (element%2!=0){
            console.log(element);
        }
    }
};

oddNum(a); // 传入全局数组a
evenNum([1,2,3,4,5,6,7,8,9,10]);

另外,你之前用console.log(oddNum())包裹函数调用是多余的——因为函数内部已经用console.log输出结果了,包裹后会额外打印undefined(函数没有返回值),直接调用函数即可。

方案2:让函数直接使用全局变量(不推荐)

如果不想传参数,可以删掉函数的参数a,这样函数内部会自动查找全局作用域里的a:

const a= [1,2,3,4,5,6,7,8,9,10];
function evenNum (a){
    for (let element of a){
        if (element%2===0){
            console.log(element);
        }
    }
};

function oddNum (){ // 去掉参数a
    for (let element of a){ // 这里的a就是全局数组
        if (element%2!=0){
            console.log(element);
        }
    }
};

oddNum();
evenNum([1,2,3,4,5,6,7,8,9,10]);

但这种方式不建议多用,全局变量容易引发命名冲突,函数通过参数接收数据会更灵活、更易维护。

内容的提问来源于stack exchange,提问作者Gilles Martinet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:18:21