Опять про точку с запятой
пара слов о проблеме неиспользования точки с запятой в JavaScript
Некоторые вопросы отказа от написания в 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
Именно поэтому, все-таки, лучше не лениться и не забывать про написание точек с запятой в исходном коде.
Спасибо за внимание.