2012-01-09 10 views
8

Secondo lo ECMAScript 5.1 spec, sezione 12.12, qualsiasi affermazione può essere etichettata - e in un breve test il mio browser ha accettato un'etichetta prima di qualsiasi affermazione. Le specifiche indicano inoltre che le etichette vengono utilizzate esclusivamente con le istruzioni break e continue e un test rapido ha rivelato che tali istruzioni generano un errore "etichetta non definita" se l'etichetta cui fanno riferimento non fa riferimento a un loop che le contiene.Come vengono utilizzate le etichette con istruzioni che non sono un ciclo?

Quindi la mia domanda è questa: quali sono le etichette per le istruzioni per le quali non vengono utilizzati i loop? Esiste un contesto in cui break o continue può fare riferimento a un'etichetta che non è un loop?

+2

Non una duplicazione, ma una domanda interessante, correlata e recente - con alcune delle risposte in qualche modo pertinenti: http://stackoverflow.com/questions/8782877/using-colons-in-javascript-variable-names- eg-abc – ziesemer

+1

haha, sì, stavo proprio leggendo quello. È quello che mi ha spinto a chiedere questo. –

risposta

6

A quanto pare il break e continue dichiarazioni può essere utilizzato all'interno di qualsiasi dichiarazione:

http://docstore.mik.ua/orelly/webprog/jscript/ch06_11.htm

nel qual caso le cose come queste diventano legale:

function show_alert() 
{ 
    label: 
    { 
     break label; 
     alert("Hello! I am an alert box!"); 
    } 
    alert("hi"); 
} 

Quando show_alert() viene chiamato, solo viene visualizzato l'avviso "ciao".

Per quanto ne so, questo è l'unico uso dei {} blocchi di codice, oltre che per lo stile del codice. (c'era una domanda su questo, e nessuno poteva inventare altro che leggibilità, ma non riesco a trovarlo ora ...)

+0

http://stackoverflow.com/questions/8735841/whats-the-purpose-of-lonely-code-blocks-in-javascript/8735997#8735997 –

+0

Questo è quello, grazie @cwolves – Jeff

+0

Ottima risposta, grazie. Ma non lo accetto come completo (ancora), dal momento che non spiega perché è possibile etichettare le istruzioni non di blocco (ad esempio 'start: var a = 1;'). –

0

Sì, è possibile etichettare qualsiasi affermazione. Hai solo bisogno di mettere la dichiarazione tra parentesi graffe, vale a dire

{start:var a=1;} 

questo non mostrerà l'errore etichetta indefinito.

Problemi correlati