Odpowiedzi:
Średniki po deklaracjach funkcji nie są konieczne .
Gramatyka a FunctionDeclaration
jest opisana w specyfikacji w następujący sposób:
function Identifier ( FormalParameterListopt ) { FunctionBody }
Gramatyka nie wymaga średnika, ale może zastanawiać się, dlaczego?
Średniki służą do oddzielania od siebie instrukcji , a a FunctionDeclaration
nie jest instrukcją .
FunctionDeclarations
są oceniane przed uruchomieniem kodu, podnoszenie jest powszechnym słowem używanym do wyjaśnienia tego zachowania.
Terminy „deklaracja funkcji” i „instrukcja funkcji” są często błędnie używane zamiennie, ponieważ nie ma instrukcji funkcji opisanej w specyfikacji ECMAScript, jednak istnieją pewne implementacje, które zawierają instrukcję funkcji w swojej gramatyce, w szczególności Mozillę, ale znowu to jest niestandardowy.
Jednak średnice są zawsze zalecane w przypadku używania FunctionExpressions
, na przykład:
var myFn = function () {
//...
};
(function () {
//...
})();
Jeśli pominiesz średnik po pierwszej funkcji w powyższym przykładzie, otrzymasz całkowicie niepożądane wyniki:
var myFn = function () {
alert("Surprise!");
} // <-- No semicolon!
(function () {
//...
})();
Pierwsza funkcja zostanie wykonana natychmiast, ponieważ nawiasy otaczające drugą będą interpretowane jako Arguments
wywołanie funkcji.
Polecane wykłady:
FunctionDeclaration
vs FunctionExpression
)Używam ich po deklaracjach funkcji jako zmiennej:
var f = function() { ... };
ale nie po definicjach w stylu klasycznym:
function f() {
...
}
JS Lint jest de facto konwencją i nie podaje średnika po treści funkcji. Zobacz sekcję „Średnik” .
Po prostu bądź konsekwentny! Nie są potrzebne, ale ja osobiście ich używam, ponieważ większość technik minifikacji opiera się na średniku (na przykład Packerze ).
Naprawdę zależy tylko od twoich preferencji. Lubię kończyć wiersze kodu średnikami, ponieważ jestem przyzwyczajony do Java, C ++, C # itd., Więc używam tych samych standardów do kodowania w javascript.
Zwykle jednak nie kończę deklaracji funkcji średnikami, ale to tylko moje preferencje.
Przeglądarki będą działać tak czy inaczej, ale może kiedyś wymyślą bardziej rygorystyczne normy.
Przykład kodu, który napisałbym:
function handleClickEvent(e)
{
// comment
var something = true; // line of code
if (something) // code block
{
doSomething(); // function call
}
}
W rzeczywistości jest to coś więcej niż kwestia konwencji lub spójności.
Jestem całkiem pewien, że nie umieszczanie średników po każdej instrukcji spowalnia wewnętrzny parser, ponieważ musi dowiedzieć się, gdzie jest koniec instrukcji. Chciałbym mieć jakieś przydatne numery, abyś mógł to pozytywnie potwierdzić, ale może sam możesz to zrobić w Google. :)
Ponadto, gdy kompresujesz lub minimalizujesz kod, brak średników może prowadzić do zminimalizowanej wersji skryptu, która nie robi tego, co chciałeś, ponieważ cała biała przestrzeń znika.
Kiedy zminimalizowałem swoje skrypty, zdałem sobie sprawę, że muszę używać średnika dla funkcji, które zaczynają się od znaku równości. jeśli zdefiniujesz funkcję jako var, tak, musisz użyć średnika.
potrzebujesz średnika
var x = function(){};
var x = new function(){};
this.x = function(){};
nie trzeba średnika
function x(){}
PROSTY:
Dobrą praktyką jest pozostawianie średników ;
po zakończeniu nawiasów klamrowych funkcji. Od lat są uważane za najlepszą praktykę.
Jedną z zalet korzystania z nich jest zawsze, gdy chcesz zminimalizować JavaScript.
Minimalizując JavaScript, pomaga nieco zmniejszyć rozmiar pliku.
Ale jeśli chodzi o najlepszą praktykę i powyższą odpowiedź, nie zaleca się używania jej po znaczniku funkcji.
Jeśli NIE użyjesz średników i jeśli chcesz zmniejszyć (jak wielu programistów lubi robić, jeśli ich witryna obsługuje dużo JavaScript), możesz uzyskać różnego rodzaju błędy / ostrzeżenia.
średnik po funkcji nie jest konieczny przy jej użyciu lub nie, nie powoduje błędów w twoim programie. jeśli jednak planujesz zminimalizować swój kod, dobrym pomysłem jest użycie średników po funkcjach. powiedzmy na przykład, że masz kod podobny do tego poniżej
//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}
i
//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};
kiedy zminimalizujesz oba, otrzymasz następujące dane wyjściowe
//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}
i
//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};