Lingua-e
JavaScript

¿Qué significa Strict mode: 'this' es undefined?

← Errores

En modo estricto, una función regular llamada sin un receptor explícito tiene 'this' establecido a undefined en lugar del objeto global. Este es el comportamiento correcto del modo estricto, pero rompe el código que accidentalmente dependía de que 'this' fuera el objeto global.

Por qué ocurre

  • Una función regular llamada como función simple (no como método) en modo estricto.
  • Un callback pasado a setTimeout o un escuchador de eventos pierde su enlace 'this'.
  • Los módulos ES están automáticamente en modo estricto, por lo que todas las funciones en ellos siguen esta regla.
  • Un método de clase extraído y llamado como función simple.

Ejemplos

JavaScript

Código que causa el error

"use strict";

function greet() {
  console.log(this.name); // 'this' is undefined
}
greet();

Error en la terminal

TypeError: Cannot read properties of undefined (reading 'name')

Cómo solucionarlo

Usa funciones flecha para callbacks para heredar 'this' del ámbito envolvente. Usa .bind(this) para fijar explícitamente el contexto. Evita depender de que 'this' sea el objeto global; es una mala práctica incluso en modo no estricto.

Código corregido

"use strict";

const obj = { name: "Alice" };

// Option 1: call with explicit context
greet.call(obj);

// Option 2: use an arrow function inside a method
const person = {
  name: "Alice",
  greet() {
    const inner = () => console.log(this.name); // arrow inherits 'this'
    inner();
  },
};

Errores relacionados

¿Listo para practicar tu inglés en el trabajo?

Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.

Prueba Lingua-e gratis