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

ラベルを正しく使用しています。

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

あなたの例では、2つのループとスイッチの間の関係が不透明なままになっているため、推奨するのは難しいです...しかし、暗黙的な外側のループを明示的な外側のループに変えて、内側のループをクロージャに入れることはいつでもできます。 :

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 に答える