6

コア Javascript を使用すると、次のようなことができることはわかっています。

for(i=1;i<10;i++){
   if(i==5){
    //break or continue
   }
}

しかし、なぜこれは正しくないのでしょうか?

$.each(iteratorarray,function(i){ //iteratorarray - just an array
  if(i==5){
    //break or continue,will cause error here
  }
});
4

6 に答える 6

9

この動作は jQuery によって実装されています。これは、jQuery api ドキュメントが言うbreakことですfalseここでそれについて読むことができます。non-falsecontinue

于 2013-01-10T05:02:13.880 に答える
4

return続きreturn falseます、壊れます。ドキュメントでは例による代替について説明breakしていますが、それでもコールバックreturnでの機能を指定してい.eachます。

于 2013-01-10T05:02:05.903 に答える
2

$.eachコールバックを使用してカスタム コードを実行しbreakます。これは、ラッピング ループを中断する可能性のある制御ステートメントです。breakorは、委任された関数からではなくcontinue、本体から直接呼び出す必要があります。loop

$.each(iteratorarray,function(i){ //iteratorarray - just an array
  if(i==5){
    //break or continue,will cause error here
  }
});

に等しいと見なすことができます

for(i=0;i<iteratorarray.length;i++){
    if(callback(i, iteratorarray[i]) === false){
        break;
    }
}

ここで、コードは関数内にあるため、コールバック内でステートメントをcallback()使用することはできません。loop control

詳細については、ドキュメントを参照してください。

于 2013-01-10T05:13:04.807 に答える
2

なぜこれは正しくないのですか?

breakorステートメントは、(for-、for-in-、while-、…)ループ ステートメントcontinueの一部としてのみ有効です。単純な関数ではそれを行うことはできません。仕様から:

[…] プログラムが . 内に直接的または間接的に (ただし関数の境界を越えていない) continue/break ステートメントを含む […] 場合、プログラムは構文的に正しくないと見なされますIterationStatement

代わりに、return関数から実行できます (これにより、関数本体のさらなる実行が中断されます)。ドキュメントで読むことができるように、戻るfalseと で反復が停止します$.each

于 2013-01-10T05:11:40.633 に答える
1

JavaScript のeveryメソッドを使用して、配列要素を反復処理することもできます。

every メソッドは、callbackfn 関数が false を返すまで、インデックスの昇順で各配列要素に対して 1 回 callbackfn 関数を呼び出します。callbackfn が false を返す要素が見つかった場合、every メソッドはすぐに false を返します。それ以外の場合、every メソッドは true を返します。

于 2013-01-10T05:08:25.200 に答える
1

この$.each場合、抜け出せるループがないため、エラーが発生します。ただし、jQuery がそれを行う方法は、breaks関数が を返す場合にループすることfalseです。

于 2013-01-10T05:03:40.977 に答える