Это реальная ошибка, которая у меня была однажды.

Вот фрагмент Javascript, который печатает «Hello World!» на две строки:

… за исключением того, что он завершается с ошибкой времени выполнения. Можете ли вы обнаружить ошибку, не запуская код?

Прокрутите вниз для подсказки.

Вот текст ошибки:

TypeError: (intermediate value)(...) is not a function

Что происходит?

Прокрутите вниз для решения.

Один символ исправляет этот код:

Без этой точки с запятой последняя функция интерпретируется как аргумент вызова функции. Вот переписывание, демонстрирующее, что происходит, когда код запускается без точки с запятой:

В этой последней строке есть 3 вызова функций:

  • f1 вызывается без аргументов
  • Возвращаемое значение f1() вызывается с f2 в качестве единственного аргумента.
  • Возвращаемое значение f1()(f2) вызывается без аргументов

Поскольку возвращаемое значение f1() не является функцией, среда выполнения выдает TypeError во время второго вызова.

С добавлением точки с запятой это становится:

Который работает, как и ожидалось.

Подождите, у вас была эта ошибка один раз?

Ага.

Зачем вообще писать код с таким количеством выражений немедленно вызываемой функции (IIFE)?

Это длинная история, но вскоре я напишу пост, в котором объясню, как я написал достаточно плохой код, чтобы иметь эту ошибку. Подпишитесь на мою рассылку, если хотите получать уведомления, когда она будет опубликована!

ОБНОВЛЕНИЕ: я сделал тот пост.

Урок

Всегда используйте точку с запятой. Этот конкретный случай был немного надуманным, но что-то подобное могло случиться и с вами. Вот еще одна программа Hello World, которая не работает по связанной с этим причине:

Я оставлю это в качестве упражнения для вас.

В большинстве руководств по стилю Javascript требуется точка с запятой, включая Google, Airbnb и jQuery. Подводя итог: всегда используйте точку с запятой.

Первоначально опубликовано на сайте victorzhou.com.

Понравилась эта статья? Подпишитесь, чтобы знать, когда я публикую новые материалы. Я не спамлю!