GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

No menu could be recovered. Follow the blue links in the page.

This view

  • Original page
  • New address

GeezerVison is showing it.javascript.info — Controllo di sintassi

  • Tutorial
  • Il linguaggio JavaScript
  • Miscellaneous
  • Il tipo Reference
torna alle lezioni

Controllo di sintassi

importanza: 2

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.

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.