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, потому что в этом случае вам не нужно беспокоиться о точках с запятой (хотя вы должны использовать их в любом случае, но это совсем другое обсуждение ;).