Вернуться к уроку

Проверка синтаксиса

важность: 2

Каков будет результат этого кода?

var obj = {
  go: function() { alert(this) }
}

(obj.go)()

P.S. Есть подвох :)

Ошибка!

Попробуйте:

var obj = {
  go: function() {
    alert(this)
  }
}

(obj.go)() // error!

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

Ошибка возникла из-за того, что после объявления obj пропущена точка с запятой.

JavaScript игнорирует перевод строки перед скобкой (obj.go)() и читает этот код как:

var obj = { go:... }(obj.go)()

Интерпретатор попытается вычислить это выражение, которое обозначает вызов объекта { go: ... } как функции с аргументом (obj.go). При этом, естественно, возникнет ошибка.