Spesifikasyonlardaki bu 3 kuralı çok iyi anlayamadım - daha sade bir İngilizceye sahip olmayı umuyorum - ama işte JavaScript'ten topladığım şey: Kesin Rehber, 6. Baskı, David Flanagan, O'Reilly, 2011:
Alıntı:
JavaScript her satır sonunu noktalı virgül olarak işlemez: yalnızca satır kesmelerini yalnızca noktalı virgül olmadan kodu ayrıştıramadığında noktalı virgül olarak kabul eder.
Başka bir alıntı: kod için
var a
a
=
3 console.log(a)
JavaScript ikinci satır sonunu noktalı virgül olarak değerlendirmez, çünkü a = 3 uzun ifadesini ayrıştırmaya devam edebilir;
ve:
JavaScript'in ikinci satırı ilk satırdaki ifadenin devamı olarak ayrıştıramadığı durumlarda satır sonlarını noktalı virgül olarak yorumladığı genel kuralın iki istisnası. İlk istisna, return, break ve continue ifadelerini içerir
... Bu kelimelerden herhangi birinden sonra satır sonu görünüyorsa JavaScript her zaman satır sonunu noktalı virgül olarak yorumlar.
... İkinci istisna ++ ve −− işleçlerini içerir ... Bu işleçlerden herhangi birini postfix işleçleri olarak kullanmak istiyorsanız, geçerli oldukları ifadeyle aynı satırda görünmeleri gerekir. Aksi takdirde, satır sonu noktalı virgül olarak ele alınır ve ++ veya -, aşağıdaki koda uygulanan önek operatörü olarak ayrıştırılır. Bu kodu düşünün, örneğin:
x
++
y
Olarak x; ++y;
değil , ayrıştırılırx++; y
Yani basitleştirmeyi düşünüyorum, yani:
(1) Bazı anahtar kelimeler gibi sonra: 2 olgu hariç - Genel olarak, JavaScript uzun mantıklı gibi kod devamı olarak ele alacaktır return
, break
, continue
ve bu görürse (2) ++
ya da --
yeni bir hat üzerinde, o zaman katacak ;
bir önceki satırın sonunda.
"Bu, mantıklı olduğu sürece kodun devamı olarak ele alın" bölümü düzenli ifadenin açgözlü eşleşmesi gibi hissettiriyor.
Yukarıda belirtilenlerle birlikte, bu return
satır kesmesi anlamına gelir , JavaScript yorumlayıcı bir;
(tekrar alıntı: Bu kelimelerden herhangi birinde bir satır sonu görünüyorsa [ör. return
] ... JavaScript her zaman satır sonunu noktalı virgül olarak yorumlar)
ve bu nedenle klasik
return
{
foo: 1
}
JavaScript yorumlayıcısı bunu şu şekilde ele alacağından beklendiği gibi çalışmaz:
return; // returning nothing
{
foo: 1
}
Aşağıdakilerden hemen sonra hiçbir satır kesmesi olmamalıdır return
:
return {
foo: 1
}
düzgün çalışması için. Ve herhangi bir ifadeden sonra ;
kullanma kuralına uymanız durumunda kendiniz ekleyebilirsiniz ;
:
return {
foo: 1
};