Controllo di sintassi
Qualâè il risultato di questo codice?
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)()
P.S. Câè una trappola :)
Errore!
Provatelo:
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)() // error!
La maggior parte dei browser non vi darà informazioni necessarie per capire cosa è andato storto.
Lâerrore viene causato dalla mancanza di un punto e virgola dopo user = {...}.
JavaScript non inserisce automaticamente un punto e virgola prima di (user.go)(), quindi leggerà il codice in questo modo:
let user = { go:... }(user.go)()
Possiamo anche vedere questa come una comune espressione, è sintatticamente una chiamata allâoggetto { go: ... } come una funzione con argomento (user.go). E questo avviene nella stessa riga di let user, quindi lâoggetto user non è ancora stato definito, quindi câè un errore.
Se inseriamo un punto e virgola, tutto funziona correttamente:
let user = {
name: "John",
go: function() { alert(this.name) }
};
(user.go)() // John
Da notare che le parentesi su (user.go) non fanno nulla. Solitamente servono ad organizzare lâordine delle operazioni, in questo caso è presente un . che verrebbe comunque eseguito per primo, non hanno quindi alcun effetto. Lâunico errore stava nel punto e virgola.