Я пишу JavaScript без точек с запятой.
И мне это действительно нравится. Язык, на мой взгляд, чище.
Вам это может не понравиться, и это понятно. Но так оно и есть.
Точки с запятой необязательны. Мы не обязаны их добавлять.
Однако иногда мы должны быть внимательны. В частности, в Node.js мы используем require() для загрузки внешних модулей и файлов.
В некоторых случаях это может привести к такой ошибке:
TypeError: require(...) is not a function
Это странная ошибка, не так ли?
Давайте посмотрим, как я это получил.
Мне потребовалась библиотека, а затем мне пришлось запустить некоторый код на корневом уровне, и я создал немедленно вызываемую асинхронную функцию:
const fs = require('fs')
(async () => {
//...
})()JS не видит точки с запятой после require(), и мы начинаем строку с ( , и JS думает, что мы пытаемся выполнить функцию.
Он рассматривает требует ('fs') как имя функции, которая действительно могла бы работать, если бы экспорт модуля вернул функцию.
Но это не так, поэтому мы получаем, что ...не является функцией ошибка.
Как нам это исправить?
Мы должны добавить точку с запятой. Где-то.
Это сработало бы:
const fs = require('fs')
;(async () => {
//...
})()и также это сработало бы:
const fs = require('fs');
(async () => {
//...
})()Это небольшая цена, которую мы должны заплатить, чтобы избежать использования точек с запятой повсюду.
Совет: ожидание верхнего уровня теперь стало реальностью, вы можете использовать его вместо этой структуры, и это предотвратит подобные ошибки.
Оригинал: “https://flaviocopes.com/is-not-a-function/”