I Shar

I Shar

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

Опять про точку с запятой

пара слов о проблеме неиспользования точки с запятой в JavaScript

I Shar

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

Photo by David Clode on Unsplash

Некоторые вопросы отказа от написания в JavaScript-коде точки с запятой уже обсуждались ранее в статье “Нужна ли точка с запятой?”. Сегодня мы возвращаемся к этой теме, чтобы поговорить о последствиях отказа от использования точки запятой для IIFE (Immediately Invoked Function Expression) - функций, которые выполняются сразу же после их определения).

Напомню про Automatic Semicolon Insertion (ASI)- механизм, который во время парсинга JavaScript автоматически добавит пропущенные точки с запятой, если последующий код прерывает предыдущий. Подробно о автоматической расстановке точек с запятой можно прочитать на сайте MDN.

Такой код будет работать превосходной (ASI в очередной раз справляется со своими задачами):

// мы пропустили точки с запятой, но все работает и без них ))
let x=1
function addOne(){
    x++
}
addOne()
console.log(x)  // вывод результата

Теперь попробуем использовать функцию addOne(), как IIFE:

// мы пропустили точки с запятой и ничего не работает
let x=1
(function addOne(){
   x++
})()
console.log(x)

А код, размещеннный ниже, работает:

let x=1; // мы просто добавили точку с запятой
(function addOne(){
   x++
})()
console.log(x)

Дело в том, что, когда отсутствует точка с запятой, парсер JavaScript определяет открывающуюся скобку немедленно выполняемой функции (IIFE), как символ, принадлежащий строке, находящейся выше, независимо от ее назначения.

(function addOne(){
^  TypeError: 1 is not a function

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


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

    • frontend
    • js

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

Далее

Категории

О нас

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