为什么这个函数返回true而不是false

时间:2012-10-11 21:51:40

标签: javascript jquery

这是我的测试:

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());

我希望test函数返回false但返回true 为什么?我该如何修复代码?请参阅评论以获取更多详细信息。

5 个答案:

答案 0 :(得分: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;
}​;

答案 1 :(得分: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;
};

答案 2 :(得分:1)

这是因为return false;只是突破了$ .each循环..而不是函数。

从最后一个语句

返回true

答案 3 :(得分: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;
}​;

答案 4 :(得分:1)

您有两个功能定义:

  • 内部函数(在$.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