Soru Javascript'teki her işlevden sonra neden noktalı virgül kullanmalıyım?


Farklı geliştiricilerin javascript işlevlerinden sonra noktalı virgül ve bazılarının bulunmadığını gördüm. En iyi uygulama hangisidir?

function weLikeSemiColons(arg) {
   // bunch of code
};

veya

function unnecessary(arg) {
  // bunch of code
}

255
2017-12-02 17:51


Menşei




Cevaplar:


Sonra noktalı virgül işlev bildirimleri Hangi gerekli değil.

Dilbilgisi FunctionDeclaration tarif edilmiştir şartname bu şekilde:

function Identifier ( FormalParameterListopt ) { FunctionBody }

Dilbilgisel olarak gerekli olan bir yarıçap yok, ama nedenini merak edebilir mi?

Noktalı virgül ifadeleri birbirinden ve FunctionDeclaration değil Beyan.

FunctionDeclarations değerlendirilir önce kod uygulamaya girer, kaldırma bir ortak sözcük Bu davranışı açıklamak için kullanılır.

"İşlev bildirimi" ve "işlev bildirimi" terimleri genellikle birbirinin yerine kullanılır, çünkü ECMAScript belirtiminde açıklanan bir işlev ifadesi yoktur, ancak dilbilgisinde, özellikle de Mozilla'da bir işlev ifadesi içeren bazı uygulamalar vardır. standart dışıdır.

Ancak, kullandığınız yerde noktalı virgüller daima önerilir FunctionExpressions, Örneğin:

var myFn = function () {
  //...
};

(function () {
  //...
})();

Yukarıdaki örnekte ilk işlevden sonra noktalı virgülü çıkarırsanız, tamamen istenmeyen sonuçları alırsınız:

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

İlk işlev hemen yürütülür, çünkü ikincisini çevreleyen parantezler, Arguments Bir fonksiyon çağrısının

Önerilen dersler:


389
2017-12-02 17:55



Açıklığa kavuşturuldu, bu makale hakkında konuşuyor işlev ifadeleri - CMS
ECMA'ya tamamen aşina değil, ama bu benim kullandığım standart. İyi yazı. İnternette gördüğüm en çok tutulan kodlar ve kod örnekleri I DL bu standardı kullanıyor, bu yüzden uyarladım. - regex
Buradaki karışıklıklardan bazıları, "göz ardı edileceğinden izin verildiği için" iyi bir ingilizce kelime eksikliğinden etkilenebilir. "İsteğe bağlı" diyerek geri dönüyoruz, ancak yanıltıcıdır çünkü bir beyandan sonra bir noktalı virgül dahil edilmemesinin, bir ifadeden sonra noktalı virgül dahil edilmediğinden aynı kategoride düştüğünü ileri sürmektedir. İkincisi, tamamen farklı bir anlamda isteğe bağlıdır: çünkü çözümleyici atladığınız eksik noktalı virgülü ekleyinBu durumda, ayrıştırıcı olacak çünkü dahil ettiğiniz noktalı virgülü yok sayın. Başka bir şekilde söylemek gerekirse: eğer isteğe bağlıysa sekiz. - Semicolon
"Adlandırılmış işlev ifadeleri demonte" bağlantısı artık bir URL'ye bağlantı veriyor, web arşivi burada bir kopyasına sahip: web.archive.org/web/20100426173335/http://yura.thinkweb2.com/... - Tony
Son örnek harika. Bu durumda bir noktalı virgülü çıkarılması, son derece garip ve hata ayıklama hatalarına yol açar. Tüm kalbiyle yukarı-oylama. - Yan Yankowski


Onları değişken-değişken bildirimlerden sonra kullanırım:

var f = function() { ... };

klasik tarzda tanımlardan sonra değil:

function f() {
    ...
}

34
2017-12-02 18:01



NetBeans'in yanı sıra diğer IDE'ler, bu gibi bir işlev-değişken-değişkeninden sonra yarı-virgül görmek isterler. Animaton_fun = function () {...}; - Lance Cleveland
Ama - soru soran için niye ya? - Luke
yapı adımı sırasında yardımcı olur. Bir uglifier komut dosyası noktalı virgül görürse, çıktı dosyasına satır sonu eklemesi gerekmez, eğer yoksa, satır sonu oluşturulacak ve dosya biraz daha büyük olacaktır. - autoboxer


JS Lint de facto sözleşmesidir ve işlev gövdesinden sonra noktalı virgül yazmaz. Bakın "Noktalı virgül" Bölüm.


20
2017-12-02 17:55



İlk elden, noktalı virgül eksikliğinden dolayı başarısız olan bir işlevi gördüm. Tamamen ayrılmanın bir kongre olduğuna katılmıyorum. Zamanın% 99.99'u kırılmayacak olsa da, IE'nin JavaScript'i noktalı virgül olmadan arayaramadığını fark ettiğim bazı durumlar var. - MillsJROSS
Cevabım sadece sorunun iki örneğinde olduğu gibi işlev tanımlarıyla ilgilenir. Bu durumlarda, sonlanan bir noktalı virgül gerekli değildir herhangi tarayıcıda herhangi durum. Sanırım fonksiyon ifadelerini düşünebilirsiniz. Onlar tamamen farklı bir meseledir ve orijinal soruda ele alınmamış bir şey değildir. - David Hedlund
var myFunction = function (arg) {console.log (arg); } (function () {console.log ('tamamen ilgisiz işlev'); 'ne olduğuna bakın';} ()); - Maciej Krawczyk


Sadece tutarlı kal! İhtiyaçları yok, ama ben bunları kişisel olarak kullanıyorum çünkü çoğu minification tekniği yarı-kolonlara dayanıyor (örneğin, toptancı).


7
2017-12-02 17:54





Gerçekten sadece tercihinize göre değişir. Java, C ++, C #, vb. İçin kullanıyorum, çünkü ben yarı colons ile kod satırlarını bitirmeyi seviyorum, bu yüzden javascript kodlama için aynı standartları kullanıyorum.

Genelde fonksiyon bildirimlerini yarı kolonlarda bitirmem ama bu sadece benim tercihim.

Tarayıcılar her iki şekilde de çalıştıracaklar, ama belki bir gün bunu yöneten daha katı standartlarla ortaya çıkacaklar.

Yazacağım kod örneği:

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}

4
2017-12-02 17:55



satırlar kesinlikle noktalı virgülle sonlandırılmalıdır, tho. aksi halde bir minifier işlevselliği tamamen bozabilir - David Hedlund
@david: Bu durumda, kıymetçi kesinlikle kırılmış mı? - DisgruntledGoat


Aslında bir kongre veya tutarlılık meselesinden daha fazlası.

Oldukça eminim ki değil Her deyimden sonra noktalı virgül yerleştirmek, iç ayrıştırıcıyı yavaşlatır çünkü deyimin sonunda nerede olduğunu bulmak zorundadır. Bunu olumlu bir şekilde onaylamanız için bazı kullanışlı numaralar dilerdim, ama belki de bunu kendiniz yapabilirsiniz. :)

Ayrıca, kodları sıkıştırırken ya da küçülttüğünüzde, yarı-yazı dizilerinin eksikliği, betiğinizin istediklerinizi yapmayan küçültülmüş bir sürümüne yol açabilir, çünkü tüm beyaz alan kaybolur.


3
2017-12-03 00:23



Soru, her ifadede değil, işlevlerden sonra, noktalı virgüllerin olması gerektiğine yöneliktir. Her ifadeden sonra noktalı virgül yerleştirmeniz gerektiğine katılıyorum ve aynı şeyi söyleyen başka stackoverflow konsensüsünü gördüm. - macca1
Anlaşılan ve işlevlerden sonra noktalı virgül koyma başarısızlığı, bahsettiğim kıymetlendirme sorununa yol açacaktır. İyi şanslar efendim. - Mason
Olumlu olan 'minification meselesini güçlendirmek neden anlayışımı açıkladı - JackW327


Komutlarımı küçülttüğümde, eşitlik işareti ile başlayan işlevler için noktalı virgül kullanmam gerektiğini anladım. 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 gerektirmez

function x(){}

1
2018-04-21 08:02





BASİT:

Noktalı virgül bırakmak iyi bir uygulamadır ; Fonksiyonun sonlandırılmasından sonra. Yıllar boyunca en iyi uygulama olarak kabul edilmişlerdir.

Her zaman bunları kullanmanın en büyük avantajlarından biri, JavaScript'inizi küçültmek.

Javascript'i küçülterek, dosya boyutunu biraz azaltmaya yardımcı olur.

Noktalı virgül kullanmıyorsanız ve küçültmek istiyorsanız (sitenin çok sayıda JavaScript sunmakta olduğu gibi bir çok geliştirici gibi) her türlü Hata / Uyarı alabilirsiniz.


0
2018-02-19 15:20