JavaScript точка с запятой в начале кода: все еще хорошая практика?

меня учили, что рекомендуется всегда вставлять точку с запятой в начале кода JavaScript, как показано ниже:

;(function(){

})();

однако многие популярные библиотеки/фреймворки JavaScript не используют это, например jQuery,Backbone и т. д.

Я считаю, что точка с запятой в начале должна предотвратить плохой код, чтобы сломать минифицированный / сжатый код и т. д. Но все же, почему им больше никто не пользуется?

имеет точку с запятой на начало почему-то оказалось бесполезным?

2 ответов


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

есть много автоматических инструментов, которые делают это. Взгляните на UglifyJS 2 например. Я уверен, что вы сможете найти еще много подобных инструментов, Если вы посмотрите вокруг.

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

не позволяйте JavaScript когда-либо делать автоматическую вставку точки с запятой для вас.

единственное место, где это допустимо, чтобы не ставить точку с запятой после функции объявление:

function foo() {} // it's alright to not put a semicolon here

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

(function foo() {})(); // you should put a semicolon here

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


более распространенной практикой является добавление точки с запятой в конце файла. Проблема в том, когда вы объединяете два файла, как это:

// file1.js
(function() {
})()

// file2.js
(function() {
})()

, не поставив точку с запятой в конце file1, он попытается вызвать возвращаемое значение из функции в file1 С помощью функции file2. Установка точки с запятой в конце каждого файла решит эту проблему (как и размещение их в начале).

другой способ-превратить вызов функции в оператор вот так:

!function() {
}();

Я думаю, что это также рекомендуется JSLint, потому что в этом случае вам не нужно беспокоиться о точках с запятой (хотя вы должны использовать их в любом случае, но это совсем другое обсуждение ;).