Yanıtlar:
Sonra noktalı virgül işlev bildirimleri vardır gerekli değildir .
A'nın dilbilgisi spesifikasyondaFunctionDeclaration
şu şekilde tarif edilir:
function Identifier ( FormalParameterListopt ) { FunctionBody }
Gramer olarak noktalı virgül gerekmez, ama nedenini merak edebilir misiniz?
Noktalı virgül ayırmak için hizmet ifadeleri birbirinden ve FunctionDeclaration
bir değil beyanı .
FunctionDeclarations
değerlendirilir önce kod çalıştırma girer, kaldırma a, ortak kelime bu davranış açıklamak için kullanılır.
"İşlev bildirimi" ve "işlev deyimi" terimleri genellikle birbirinin yerine kullanılır, çünkü ECMAScript Spesifikasyonu'nda tarif edilen bir işlev deyimi yoktur, ancak gramerlerine, özellikle de Mozilla'ya bir işlev deyimi içeren bazı uygulamalar vardır. standart değildir.
Bununla birlikte FunctionExpressions
, kullandığınız yerlerde her zaman noktalı virgüller önerilir , örneğin:
var myFn = function () {
//...
};
(function () {
//...
})();
Yukarıdaki örnekte ilk işlevden sonra noktalı virgül kullanmazsanız, tamamen istenmeyen sonuçlar elde edersiniz:
var myFn = function () {
alert("Surprise!");
} // <-- No semicolon!
(function () {
//...
})();
İlk işlev hemen yürütülür, çünkü ikincisini çevreleyen parantezler Arguments
bir işlev çağrısı olarak yorumlanır .
Önerilen dersler:
FunctionDeclaration
vs hakkında daha fazla bilgi FunctionExpression
)Bunları değişken işlev bildirimlerinden sonra kullanırım:
var f = function() { ... };
ancak klasik stil tanımlarından sonra değil:
function f() {
...
}
JS Lint fiili bir sözleşmedir ve işlev gövdesinden sonra noktalı virgül kullanmaz. Bkz "noktalı virgül" bölümüne.
Sadece tutarlı olun! Bunlara gerek yok, ama ben şahsen kullanıyorum çünkü çoğu küçültme tekniği yarı kolon (örneğin Packer ) kullanıyor.
Gerçekten sadece tercihinize bağlıdır. Java, C ++, C #, vb için alışkınım, bu yüzden javascript kodlama için aynı standartları kullandığım için kod satırlarını noktalı virgüllerle bitirmek istiyorum.
Genellikle noktalı virgüllerde işlev bildirimlerini sonlandırmıyorum, ama bu sadece benim tercihim.
Tarayıcılar her iki şekilde de çalışacak, ancak belki bir gün bunu yöneten daha katı standartlar getirecekler.
Yazacağım kod örneği:
function handleClickEvent(e)
{
// comment
var something = true; // line of code
if (something) // code block
{
doSomething(); // function call
}
}
Aslında bir konvansiyon veya tutarlılık meselesinden daha fazlası.
Bunu eminim değil o ifadenin ucunun nerede olduğunu anlamaya çünkü iç ayrıştırıcı aşağı tüm ifadelerle yavaşlatır sonra noktalı virgül koyarak. Bunu olumlu olarak onaylamanız için bazı kullanışlı numaralar olmasını dilerdim, ama belki de kendiniz google yapabilirsiniz. :)
Ayrıca, kodu sıkıştırırken veya küçültürken, noktalı virgül eksikliği, komut dosyanızın tüm beyaz boşluk gittiğinden, istediğinizi yapmayan küçültülmüş bir sürümüne yol açabilir.
Betiklerimi küçültdüğümde eşittir işaretiyle başlayan işlevler için noktalı virgül kullanmam gerektiğini fark ettim. bir işlevi var olarak tanımlarsanız, evet noktalı virgül kullanmanız gerekir.
noktalı virgül lazım
var x = function(){};
var x = new function(){};
this.x = function(){};
noktalı virgül gerekmez
function x(){}
BASİT:
;
İşlev parantezlerinin sona ermesinden sonra noktalı virgüllerin ayrılması iyi bir uygulamadır . Yıllardır en iyi uygulama olarak görülüyorlar.
Her zaman bunları kullanmanın bir avantajı, JavaScript'inizi küçültmek istiyorsanız.
Javascript küçültülürken, dosya boyutunu biraz azaltmaya yardımcı olur.
Ancak yukarıdaki en iyi uygulama ve cevap için, bir işlev etiketinden sonra kullanılması önerilmez.
Noktalı virgül KULLANMAYINIZ ve küçültmek istiyorsanız (geliştiricilerin siteleri çok fazla JavaScript sunuyorsa yapmak istedikleri gibi) her türlü Hata / Uyarıyı alabilirsiniz.
bir işlevden sonra noktalı virgül kullanmanız gerekip gerekmediği, programınızda hatalara neden olmaz. ancak, kodunuzu küçültmeyi planlıyorsanız, işlevlerden sonra noktalı virgül kullanmak iyi bir fikirdir. örneğin, aşağıdakine benzer bir kodunuz olduğunu varsayalım
//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}
ve
//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};
Her ikisini de küçültdüğünüzde, çıktı olarak aşağıdakileri elde edersiniz
//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}
ve
//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};