¿Cuál será el resultado del siguiente programa?
function f(input: boolean) {
let a = 100;
if (input) {
let b = a + 1;
}
return b;
}

Explicación del Error de Compilación para 'b'

La pregunta gira en torno a la ejecución de un programa codificado en TypeScript, que es una extensión de JavaScript. Específicamente, el examen está configurado para evaluar la comprensión del ámbito de las variables, observando de cerca las declaraciones de las variables a y b.

En la función f(input: boolean), la variable a se define en el ámbito de la función, mientras que b se define solo en el bloque if (input). Como tal, la variable b solo existe dentro del bloque if, y fuera de ese bloque, como es el caso en la línea return b;, b es inaccesible.

En TypeScript, así como en JavaScript en modo estricto (use strict), esta situación desencadenará un error de compilación, ya que b no está definida fuera del bloque if. Esto significa que la variable b no se 'propaga' fuera del bloque en el que fue declarada.

Si queremos que el código funcione correctamente, tendríamos que definir b en el mismo ámbito que a, como se muestra a continuación:

function f(input: boolean) {
  let a = 100;
  let b;
  if (input) {
    b = a + 1;
  }
  return b;
}

Este código ahora compilará correctamente, ya que hemos establecido b en el ámbito de la función, y no solo en el bloque if.

Asimismo, es importante tener en cuenta que las variables de bloque, como b en este ejemplo, son una característica útil del lenguaje TypeScript/JavaScript, ya que ayudan a evitar la contaminación del ámbito global y pueden mejorar la legibilidad del código al dejar claro dónde se usa una variable. Estas variables se utilizan con frecuencia en la programación funcional y deben ser utilizadas con cuidado para evitar errores como el que plantea la pregunta.

¿Te resulta útil?