2012-01-09 12 views
8

Según el ECMAScript 5.1 spec, sección 12.12, cualquier declaración puede etiquetarse, y en una breve prueba mi navegador aceptó una etiqueta antes de cualquier declaración. La especificación también establece que las etiquetas se usan exclusivamente con las declaraciones break y continue, y una prueba rápida reveló que esas declaraciones arrojan un error de "etiqueta no definida" si la etiqueta a la que hacen referencia no se refiere a un bucle que las contiene.¿Cómo se usan las etiquetas con las declaraciones que no son un bucle?

Así que mi pregunta es esta: ¿qué son las etiquetas para las declaraciones que no se utilizan bucles? ¿Hay algún contexto en el que break o continue puedan hacer referencia a una etiqueta que no sea un bucle?

+2

No es una tontería, pero es una pregunta interesante, relacionada y reciente, con algunas de las respuestas algo relevantes: http://stackoverflow.com/questions/8782877/using-colons-in-javascript-variable-names- eg-abc – ziesemer

+1

jaja, sí, estaba leyendo eso. Es lo que me impulsó a preguntar esto. –

Respuesta

6

Al parecer, el descanso y continue se puede utilizar dentro de cualquier declaración:

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

en cuyo caso este tipo de cosas se vuelven legales:

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

Cuando show_alert() se llama, sólo se la alerta "hi" se muestra.

Hasta donde yo sé, este es el único uso de los {} bloques de código, excepto para el diseño del código. (había una pregunta aquí acerca de eso, y nadie podía encontrar nada más que legibilidad, pero no puedo encontrarlo ahora ...)

+0

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

+0

Esa es la única, gracias @cwolves – Jeff

+0

Gran respuesta, gracias. Pero no lo estoy aceptando como completo (todavía), ya que no explica por qué puede etiquetar declaraciones que no sean de bloque (por ejemplo, 'start: var a = 1;'). –

0

Sí, puede etiquetar cualquier afirmación. Usted sólo tiene que poner la declaración de llaves, es decir

{start:var a=1;} 

esto no va a mostrar la etiqueta de error no definido.

Cuestiones relacionadas