在我的javascript中,我有这个
loopDeLoop:
while (foo !== bar) {
switch (fubar) {
case reallyFubar:
if (anotherFoo == anotherBar) {
break loopDeLoop;
}
break;
default:
break;
}
}
但是JSLint说... lint警告:使用标签
以下是来自JSLint
的说明标签
JavaScript允许任何语句具有标签,标签具有单独的名称空间。 JSLint更严格。JSLint只期望与break:switch,while,do和for交互的语句上的标签。 JSLint期望标签与vars和参数不同。
如何构建上述内容以消除警告?
谢谢,
格雷格
答案 0 :(得分:14)
您正确使用标签。
JSLint正在发出警告,因为Javascript中的标签风格非常糟糕,JSLint希望您知道这一点。
重申一下,如果您使用标签,即使是正确的,JSLint也会发出警告。
编辑:
看起来您可以使用-use_of_label
配置指令禁用标签警告。
答案 1 :(得分:0)
您可以设置一个标志,确定您是否在循环中完成了工作。
var done = false;
while (foo !== bar && !done) {
switch (fubar) {
case reallyFubar:
if (anotherFoo == anotherBar) {
done = true;
}
break;
default:
break;
}
if(!done) {
//If you have more logic inside the loop, put it here
}
}
答案 2 :(得分:0)
有点难以推荐看到两个循环和开关之间的关系在你的例子中是如何保持不透明的......但是你总是可以将隐式外循环变成一个显式外循环,放入内循环在封闭中:
while ( (function() // loop while function returns true
{
while (foo !== bar)
{
switch (fubar)
{
case reallyFubar:
if (anotherFoo == anotherBar)
{
return true; // back to outer loop
}
break;
default:
break;
}
}
return false; // done looping
})()) {};
在采取像这样丑陋的事情之前,我可能会尝试将内部循环中隐含的任何算法分解为单独的函数。