JavaScript对象内声明函数触发无限循环报错问题排查
问题根因
编译提示无限循环、代码运行报错的核心是this指向的引用层级错误:
- 当通过
movie.totalRevenue()调用对象方法时,方法内部的this直接指向movie对象本身,对象下不存在this.movie这个属性 - 原代码中
this.movie.boxOffice的写法等价于尝试读取movie.movie.boxOffice,movie.movie实际为undefined,读取undefined的属性会直接抛出类型错误;部分IDE的静态检测规则会将这类错误的自引用逻辑判定为潜在无限递归(无限循环)风险,因此抛出对应提示。
修复方案
删除方法内多余的.movie引用层级,直接通过this访问对象自身属性即可,修正后可正常编译运行:
let movie = { title: "Forrest Gump", director: "Robert Zemeckis", composer: "Alan Silvestri", budget: 55000000, boxOffice: 677900000, awards: [], totalRevenue: function () { let x = this.boxOffice - this.budget; return x; }, }; // 调用验证 console.log(movie.totalRevenue()) // 输出计算结果:622900000
如果你的IDE支持ES6语法,还可以使用更简洁的对象方法简写格式,逻辑完全一致:
let movie = { title: "Forrest Gump", director: "Robert Zemeckis", composer: "Alan Silvestri", budget: 55000000, boxOffice: 677900000, awards: [], // ES6对象方法简写 totalRevenue() { return this.boxOffice - this.budget; }, };
内容的提问来源于stack exchange,提问作者Neoguru
相关产品推荐
相关产品推荐

