Skip to content

Latest commit

 

History

History
37 lines (25 loc) · 1.13 KB

File metadata and controls

37 lines (25 loc) · 1.13 KB

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 ";".