Eroare!
Incercați:
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)() // eroare!
Din mesajul de eroare furnizat de majoritatea browserelor nu reiese ce a mers prost.
Eroarea apare deoarece simbolul ";" lipsește după user = {...}
.
Limbajul JavaScript nu adaugă automat un simbol ";" înainte de paranteză (user.go)()
, deci citește codul ca:
let user = { go:... }(user.go)()
Apoi, putem vedea, de asemenea, că o astfel de expresie combinată este sintactic un apel al obiectului { go: ... }
ca funcție cu argumentul (user.go)
. Și asta se întâmplă și pe aceeași linie cu let user
, deci obiectul user
nu a fost încă definit, de unde și eroarea.
Dacă introducem un simbol ";", totul este în regulă:
let user = {
name: "John",
go: function() { alert(this.name) }
}*!*;*/!*
(user.go)() // John
Rețineți că parantezele din jurul (user.go)
nu fac nimic aici. De obicei setează ordinea operațiilor, dar aici punctul .
are oricum precedență, deci nu are niciun efect. Singurul lucru care contează este simbolul ";".