1

これが私のテストです:

var test = function () {
    $.each([1, 2], function () {
        if(true !== false) { // it is just an example
            alert('I am here'); 
            return false; // how should I make the function test to stop or to exit here?
        }
    });
    return true;
}​;

alert(test());

</p>

test関数が false を返すようにしたいのですが、 true を返します。
なんで?コードを修正するにはどうすればよいですか? 詳しくはコメントをご覧ください。

4

5 に答える 5

13

falseコールバックから戻ると、反復.each()が停止するだけです。.each()囲んでいる関数からは戻りません。JavaScript でこれを行う唯一の方法は、例外をスローすることです。

あなたができることは、フラグを設定することです:

var test = function () {
    var abort = false;
    $.each([1, 2], function () {
        if(true !== false) { // it is just an example
            alert('I am here'); 
            abort = true;
            return false; // how should I make the function test to stop or to exit here?
        }
    });
    return !abort;
}​;
于 2012-10-11T21:53:20.167 に答える
4

true内部が匿名関数を返すため、戻ります。これは、ループを早期return falseに終了するよう jQuery に指示するだけです。$.each

内部関数の外で変数を使用して、戻りステータスを適切に調整します。

var test = function () {
    var retVal = true;
    $.each([1, 2], function () {
        if(true !== false) { // it is just an example
            alert('I am here'); 
            retVal = false;
            return false;
        }
    });
    return retVal;
}​;

$.each単純なfor...inループで十分な場合は、メソッドを使用しないようにコードを変更することもできます。

var test = function () {
    var retVal = true;
    for (var value in [1, 2]) {
        if(true !== false) { // it is just an example
            alert('I am here'); 
            return false;
        }
    };
    return true;
};
于 2012-10-11T21:53:47.073 に答える
1

これはreturn false;、関数ではなく $.each ループから抜け出すためです。

最後のステートメントから true を返します

于 2012-10-11T21:54:33.827 に答える
1

コードを次のように変更して修正します。

var test = function () {
    var returnValue = true;
    $.each([1, 2], function () {
        if(true !== false) { // it is just an example
            alert('I am here'); 
            returnValue = false;
            return false; // how should I make the function test to stop or to exit here?
        }
    });
    return returnValue;
}​;
于 2012-10-11T21:55:10.650 に答える
1

2 つの関数定義があります。

  • 内部関数 (in $.each): false を返します
  • 外部関数 ( window.test): true を返します

終了時にキャプチャ:

var arr = [1,2,3,4,5,6,7,8,9];
var breakpoint = undefined;
$.each(arr, function(i,val){
   if (val==4){  // some break condition
      breakpoint = {index:i,val:val};
      return false;
   }
   return true;
});

console.log('break point:', breakpoint); // breakpoint.index=3, breakpoint.val=4

次に、外部関数で のようなことをしたり、他の人が提案したようreturn typeof breakpoint !== 'undefined';に a を設定したりできます。returnValue

于 2012-10-11T21:55:27.190 に答える