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

JavaScript类变量在forEach循环中为undefined如何解决

问题原因

Class 语法默认运行在严格模式下。forEach 接收普通函数作为回调时,该函数存在独立的 this 绑定,不会继承外层类方法的 this 指向(即类实例本身);严格模式下未显式绑定的 this 值为 undefined,因此回调内访问 this.myVar 无法拿到预期结果。
方法外层、普通for循环不会产生新的函数级this绑定,因此这两个位置访问this.myVar可以正常运行。

可用解决方案
  • 改用箭头函数作为回调
    箭头函数本身没有独立的this绑定,会直接捕获外层作用域的this(即类实例),是最简洁的推荐写法:
    itemList.forEach((element) => {
        console.log(this.myVar); // 正常获取实例属性值
    });
    
  • 传入forEach的第二个参数指定this绑定
    forEach原生支持第二个入参,该参数会被作为回调函数运行时的this值,直接传入外层的this即可:
    itemList.forEach(function(element){
        console.log(this.myVar); // 正常获取实例属性值
    }, this);
    
  • 外层缓存this引用
    在进入forEach逻辑前,先把外层正确的this引用存到变量中,回调内部直接访问该缓存变量:
    iterate(itemList){
        const _this = this; // 缓存类实例的this引用
        // 其余逻辑省略
        itemList.forEach(function(element){
            console.log(_this.myVar); // 正常获取实例属性值
        });
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:21:34