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 uk.javascript.info — Перевірка синтаксису

  • Підручник
  • Мова програмування JavaScript
  • Різне
  • Посилальний тип
назад до уроку

Перевірка синтаксису

важливість: 2

Який результат цього коду?

let user = {
  name: "Іван",
  go: function() { alert(this.name) }
}

(user.go)()

П.С. Тут є пастка :)

Помилка!

Спробуйте:

let user = {
  name: "Іван",
  go: function() { alert(this.name) }
}

(user.go)() // помилка!

Повідомлення про помилку в більшості браузерів не дає нам велику кількість підказок про те, що пішло не так.

Помилка з’являється, оскільки крапка з комою відсутня після user = {...}.

JavaScript не вставляє автоматично крапку з комою перед дужками (user.go)() тому, що він читає код, як:

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

Тоді ми також можемо побачити, що такий спільний вираз синтаксично є викликом об’єкта { go: ... } як функція з аргументом (user.go). І це також відбувається на тій же лінії, з let user, тому, оскільки об’єкт user ще не визначений, виникає помилка.

Якщо ми вставляємо крапку з комою, все добре:

let user = {
  name: "Іван",
  go: function() { alert(this.name) }
};

(user.go)() // Іван

Зверніть увагу, що дужки навколо (user.go) нічого не роблять тут. Зазвичай вони встановлюють порядок операцій, але тут крапка спрацьовує спочатку в будь-якому випадку, тому немає ефекту. Тільки грає роль лише крапка з комою вкінці.

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.