Kuralları Javascript'ler otomatik noktalı virgül ekleme (ASI) nedir?
Öncelikle muhtemelen bu tarayıcı bağımlı olduğunu sor.
Eğer geçersiz bir belirteç bulunursa okudum, ama kod bölümü geçersiz token, noktalı virgül ise satır sonu öncesinde ise token önce eklenen tarihine kadar geçerlidir.
Ancak, yaygın örneği böcekler noktalı virgül ekleme neden gösterdi
return
_a b;
_a geçerli bir simge olacağından bu kural olarak görünmüyor. Öte yandan, arama zincirleri kırıp beklendiği gibi çalışır:
$('#myButton')
.click(function(){alert("Hello!")});
Kimse derinlemesine kuralları açıklaması daha var mı?
CEVAP
Öncelikle otomatik noktalı virgül ekleme (ayrıca kısaltma için ASI olarak bilinen) etkilenir.:
- boş deyim
var
deyim- ifade deyimi
- 9* *deyim
- 10* *deyim
- 11* *deyim
- 12* *deyim
- 13* *deyim
ASİ somut kuralları, şartnamede:
Üç durum tanımlanmıştır:
Belirteç (
LineTerminator
}
) dilbilgisi tarafından izin verilmeyen karşılaşıldığında, noktalı virgül önce eklenmiş olur:- Belirteç 16* *en az bir önceki token ayrılır.
- Belirteç
}
E. g.:
{ 1 2 } 3 // is transformed to { 1 ;2 ;} 3;
Bu
NumericLiteral
1
ilk koşulu karşılaması, aşağıdaki belirteç bir satır sonlandırıcı.2
ikinci koşul karşılar, aşağıdaki token}
.Ne zaman son giriş akışı simgeleri ile karşılaştı ve çözümleyici mümkün ayrıştırma giriş token akışı olarak bir tek tam Program, daha sonra bir noktalı otomatik olarak eklenen sonunda giriş akışı.
E. g.:
a = b c // is transformed to: a = b; c;
Bu durumda bir belirteç dilbilgisi bazı üretim izin oluşur, ama bir üretimüretim kısıtlınoktalı virgül otomatik olarak kısıtlı token önce eklenmiş.
Sınırlı üretimler:
PostfixExpression :
LeftHandSideExpression [no LineTerminator here]
LeftHandSideExpression [no LineTerminator here] --
ContinueStatement :
continue [no LineTerminator here] Identifieropt ;
BreakStatement :
break [no LineTerminator here] Identifieropt ;
ReturnStatement :
return [no LineTerminator here] Expressionopt ;
ThrowStatement :
throw [no LineTerminator here] Expression ;
Klasik örnek, ReturnStatement
ile:
return
"something";
// is transformed to
return;
"something";
Noktalı virgül Python ve JavaScript ar...
JavaScript kütüphaneleri önde gelen no...
Ekleme " nedir;?ve link ve script ...
jilet javascript ve sondaki noktalı vi...
JavaScript değişken tanımlama: Virgül ...