regresar a la lección

Verificación de sintaxis

importancia: 2

¿Cuál es el resultado de este código?

let user = {
  name: "John",
  go: function() { alert(this.name) }
}

(user.go)()

P.D. Hay una trampa :)

¡Error!

Inténtalo:

let user = {
  name: "John",
  go: function() { alert(this.name) }
}

(user.go)() // ¡Error!

El mensaje de error en la mayoría de los navegadores no nos da una pista sobre lo que salió mal.

El error aparece porque falta un punto y coma después de user = {...}.

JavaScript no inserta automáticamente un punto y coma antes de un paréntesis (user.go)(), por lo que lee el código así:

let user = { go:... }(user.go)()

Entonces también podemos ver que tal expresión conjunta es sintácticamente una llamada del objeto { go: ... } como una función con el argumento (user.go). Y eso también ocurre en la misma línea con let user, por lo que el objeto user aún no se ha definido y de ahí el error.

Si insertamos el punto y coma todo está bien:

let user = {
  name: "John",
  go: function() { alert(this.name) }
};

(user.go)() // John

Tenga en cuenta que los paréntesis alrededor de (user.go) no hacen nada aquí. Usualmente son configurados para ordenar las operaciones, pero aquí el punto . funciona primero de todas formas, por lo que no tienen ningún efecto en él. Solamente el punto y coma importa.