dr.Brain

doctor Brain

мир глазами веб-разработчика

Что делать с ошибкой "is not a function"

как поступать с ошибкой "is not a function" в JavaScript

dr.Brain

время чтения 2 мин.

Photo by David Clode on Unsplash

Многие разработчики не используют точку с запятой при написании кода, видимо, потому, что так удобно. Возможно, такой код легче читается. С другой стороны, не меньшее количество программистов придерживается синтаксиса с замыкающей точкой с запятой. Такая позиция тоже понятна и имеет право на существование. В конце концов, каждый веб-разработчик выбирает свой уникальный путь. Что касается точки с запятой - в настоящее время, как Вы уже поняли, в JavaScript этот знак не является обязательным.

Тем не менее, синтаксис без точек с запятой требует от программиста дополнительного внимания, особенно в Node,js, где функция require() применяется для подключения внешних модулей и файлов.

В некоторых случаях можно столкнуться с такой ошибкой:

TypeError: require(...) is not a function

Странная ошибка, не так ли?

Давайте разберем, почему она появляется.

Например, я подгружаю в свой код какую-то библиотеку и следом пишу немедленно вызываемую асинхронную функцию:

    const fs = require('fs')

(async () => {
  //...
})()

Итак, JavaScript не находит точку с запятой после require(), а следующая строка начинается с открывающей скобки. В результате, JavaScript считает, что мы пытаемся запустить функцию и принимает require('fs') за имя функции. Возможно для кого-то это будет открытием, но такой синтаксис может сработать если require('fs') действительно возвращает функцию. Но чаще всего результатом является не функция, поэтому мы получаем ошибку:

TypeError: require(...) is not a function

Как же избежать такой ошибки?

Итак, в некоторых местах все-таки придется добавить точку с запятой.

Например, такой подход будет работать:

const fs = require('fs')

;(async () => {
  //...
})()

и такой тоже:

const fs = require('fs');

(async () => {
  //...
})()

Возможно, это небольшая цена, которую приходится платить за код без точек с запятой.


Спасибо за внимание.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.