4

在我的 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 期望标签与变量和参数不同。

如何构建上述内容以消除警告?

谢谢,
格雷格

4

3 回答 3

14

您正确使用了标签。

JSLint 发出警告,因为 Javascript 中的标签风格非常糟糕,而 JSLint 希望您知道这一点。

重申一下,如果您完全使用标签,即使是正确的,JSLint 也会发出警告。

编辑:看起来您可以使用-use_of_label配置指令禁用标签警告。

于 2008-12-19T22:08:29.860 回答
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
    }
}
于 2008-12-19T17:38:24.867 回答
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
})()) {};

在诉诸像这样丑陋的东西之前,我可能会尝试将内部循环中隐含的任何算法分解为一个单独的函数。

于 2008-12-19T17:38:30.280 回答