SORU
17 Mayıs 2010, PAZARTESİ


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
17 Mayıs 2010, PAZARTESİ


Ö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:

  1. 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 }.

  2. 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;
    
  3. 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";

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • Autocar

    Autocar

    11 Mart 2006
  • CNNMoney

    CNNMoney

    16 Kasım 2006