Что делает ведущая точка с запятой в библиотеках JavaScript?

В нескольких библиотеках JavaScript я видел эту запись в самом начале:

/**
 * Library XYZ
 */
;(function () {
  // ... and so on

Хотя мне вполне комфортно с синтаксисом "немедленно выполняемая функция"

(function(){...})()

Мне было интересно, для чего используется главная точка с запятой. Все, что я мог придумать, это то, что это страховка. То есть, если библиотека встраивается в другой, глючный код, она служит в качестве "скачка скорости" "последнее утверждение заканчивается здесь в самый последний".

Есть ли у него другие функциональные возможности?

5 ответов

Решение

Он позволяет безопасно объединять несколько файлов JS в один, чтобы он быстрее обслуживался как один HTTP-запрос.

На самом деле лучший ответ был дан в вопросе, поэтому я просто напишу это здесь для ясности:

Ведущий ; перед выражениями функций, вызываемыми немедленно, чтобы предотвратить ошибки при добавлении файла во время конкатенации к файлу, содержащему выражение, неправильно завершенное с помощью ;,

Рекомендуется заключать выражения в точки с запятой, а также использовать начальную точку с запятой в качестве гарантии.

В общем случае, если оператор начинается с (, [, /, + или -, есть вероятность, что его можно интерпретировать как продолжение предыдущего оператора. Утверждения, начинающиеся с /, + и -, довольно редки на практике, но операторы, начинающиеся с (и [, не являются чем-то необычным, по крайней мере, в некоторых стилях программирования JavaScript. Некоторые программисты любят ставить защитную точку с запятой в начале любого такого оператора, чтобы он продолжал работать правильно, даже если оператор перед его изменением и удалением завершающей точки с запятой:

var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate

Источник:

Javascript Полное руководство 6-е издание

Это называется ведущей точкой с запятой.

Его основная цель - защитить себя от неправильного закрытия предыдущего кода, что может вызвать проблемы. Точка с запятой предотвратит это. Если предыдущий код был неправильно закрыт, наша точка с запятой исправит это. Если он был правильно закрыт, то наша точка с запятой будет безвредной и не будет никаких побочных эффектов.

Это хорошо, когда вы минимизируете JS коды. Предотвратить неожиданные синтаксические ошибки.

Другие вопросы по тегам