根据ECMAScript 5.1 spec第12.12节,可以标记任何声明 - 在简短的测试中,我的浏览器在任何声明之前接受了标签。该规范还声明标签仅与break
和continue
语句一起使用,并且快速测试显示,如果它们引用的标签不引用循环,则这些语句会引发“未定义标签”错误包含它们。
所以我的问题是:什么是非循环用语句的标签?是否有一些上下文break
或continue
可以引用不是循环的标签?
答案 0 :(得分:6)
显然,break和continue语句可以在任何语句中使用:
http://docstore.mik.ua/orelly/webprog/jscript/ch06_11.htm
在这种情况下,这样的事情变得合法:
function show_alert()
{
label:
{
break label;
alert("Hello! I am an alert box!");
}
alert("hi");
}
调用show_alert()时,只显示“hi”警告。
据我所知,这是{}代码块的唯一用途,而不是代码样式。 (这里有一个问题,没有人可以提出除可读性以外的任何东西,但我现在找不到它了......)
答案 1 :(得分:0)
是的,您可以标记任何声明。你只需要将语句放在花括号中,即
{start:var a=1;}
这不会显示未定义的标签错误。