Nuxt3 script setup中函数if块访问顶部声明变量报错求助
报错原因
- script setup是Nuxt3/Vue3的编译期语法,该作用域下声明的普通函数没有绑定组件实例,
this为undefined,第89行代码访问this.max相当于访问undefined的max属性,直接触发运行错误。你误以为是around自增报错,实际上代码执行到第89行的console.log时就已经抛出异常,还没运行到around++的逻辑。 - 右上角方向的边界判断逻辑完全错误:你写的
y < 0 && x > max本身就不可能满足合法索引要求,即使进入判断逻辑,访问grid[y - 1]也必然是undefined,继续访问索引属性就会触发「Cannot read properties of undefined (reading '1')」的报错。 - 所有grid数组的访问都没有做层级安全校验,只要某一层索引超出范围返回undefined,后续的属性访问都会直接报错。
解决方案
- 修复第89行的错误调用
删除this前缀,直接访问函数内声明的局部变量max即可:
// 修改前 console.log({max: this.max}); // 修改后 console.log({max});
- 修正右上角方向的判断逻辑
将逻辑反转成合法的边界判断,同时加上可选链做安全访问:
// 修改前 if (y < 0 && x > max && grid[y - 1][x + 1].bomb) { // 修改后 if (y > 0 && x < max && grid[y - 1]?.[x + 1]?.bomb) {
- 全量替换所有grid访问为可选链写法,避免层级undefined报错,示例如下:
// 原写法 if (y > 0 && grid[y - 1][x].bomb) { // 替换后 if (y > 0 && grid[y - 1]?.[x]?.bomb) {
所有涉及grid[索引][索引].属性的写法都按照上述规则修改即可。
内容的提问来源于stack exchange,提问作者radmacher
相关产品推荐
相关产品推荐

