Lingua-e
← Errores
JavaScript

Qué significa Strict mode: 'this' es undefined y cómo solucionarlo

Referencia del error

Strict mode: 'this' es undefined

Lenguaje

JavaScript

Severidad

Media

Cuándo ocurre

En modo estricto, una función regular llamada sin un receptor explícito tiene 'this' establecido a undefined en lugar del objeto global.

Posibles soluciones

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.

Más detalles

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.

Posibles soluciones

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.

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ó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();
  },
};

Practica en inglés

¿Cómo le explicarías un Strict Mode: 'this' is undefined a un compañero dev? Elige la frase correcta:

"I hit an error...

¿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