Это реальная ошибка, которая у меня была однажды.
Вот фрагмент 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.
Понравилась эта статья? Подпишитесь, чтобы знать, когда я публикую новые материалы. Я не спамлю!