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

您有两个函数定义:

  • 内部函数 (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';,或者returnValue按照其他人的建议设置 a。

于 2012-10-11T21:55:27.190 回答