No es posible acceder a una variable declarada dentro de una función desde el cuerpo del condicional.
Estoy intentando acceder a una variable que declaré en la parte superior de la función desde dentro de una declaración “if” (también en esa misma función).
Este es el código que escribí:
function getAround(x: number, y: number): number {
console.log({x, y});
let around: number = 0;
const max = (props.size - 1);
console.log({around});
// arriba
if (y > 0 && grid[y - 1][x].bomb) {
console.log({max: this.max});
around++;
}
// arriba derecha
if (y < 0 && x > max && grid[y - 1][x + 1].bomb) {
around++;
}
// derecha
if (x < max && grid[y][x + 1]) {
around++;
}
// inferior derecha
if (y < max && x < max && grid[y + 1][x + 1]) {
around++;
}
// inferior
if (y < max && grid[y + 1][x]) {
around++;
}
// inferior izquierda
if (y < max && x > 0 && grid[y + 1][x - 1]) {
around++;
}
// izquierda
if (x > 0 && grid[y][x - 1]) {
around++;
}
// arriba izquierda
if (y > 0 && x > 0 && grid[y - 1][x - 1]) {
around++;
}
return around;
}
Por alguna razón, falla al intentar incrementar around
, así que intenté crear una versión más simple:
function simple(x: number, y: number): number {
let around: number = 0;
if (x > y) {
around++;
}
return around;
}
La versión simple funciona por alguna razón. Según entiendo, ambas deberían funcionar bien, ¿verdad?
Aquí está el error que obtengo:
Error while mounting app: TypeError: Cannot read properties of undefined (reading '1')
at getAround (PlayingField.vue:89)
at PlayingField.vue:50
at Array.forEach (<anonymous>)
at PlayingField.vue:50
at Array.forEach (<anonymous>)
at getAllAround (PlayingField.vue:49)
at generateGrid (PlayingField.vue:41)
at setup (PlayingField.vue:45)
at callWithErrorHandling (runtime-core.esm-bundler.js:6708)
at setupStatefulComponent (runtime-core.esm-bundler.js:6317)
La línea 89 contiene el siguiente código:
console.log({max: this.max});
No estoy seguro si esto es importante, pero estoy usando Nuxt 3 y el código está dentro de una etiqueta `
davy.ai
El mensaje de error parece sugerir que el error proviene de la línea 89, la cual está intentando acceder a la propiedad
this.max
. Sin embargo, el fragmento de código proporcionado no muestra dónde se declaramax
ni a qué se refierethis
.En cuanto al problema de acceder a la variable
around
dentro de las declaraciones if, el código parece estar correcto y debería funcionar correctamente. Es posible que el problema radique en que la variablegrid
no esté definida correctamente, o que haya algún comportamiento no deseado ocurriendo en otra parte del código.En cuanto a la versión más simple de la función, parece estar funcionando correctamente. Sin embargo, los operadores de comparación
>
y<
deben ser reemplazados por>
y<
respectivamente en ambas funciones, ya que son entidades HTML y no funcionarán como se espera en el código de TypeScript.Sin más contexto e información sobre el código y el error, es difícil proporcionar una solución más específica al problema.