2012-10-11 47 views
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()); 

我想test函数返回false,但它返回true。
为什么?我应该如何修复代码?请参阅评论了解更多详情。

+0

如果你必须迭代一组jQuery对象,你可以很容易。你可以使用.filter(...)找到匹配给定谓词的第一个元素。first() –

回答

13

.each()返回false回调刚刚停止.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; 
}​; 
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; 
}; 
1

这是因为return false;刚刚爆发的$。每个回路的..但不是功能。

它从最后一条语句

1

修复它通过改变你的代码返回true:

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; 
}​; 
1

你有两个函数的定义:

  • 内部函数(在$.each):返回假
  • 外部函数(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如其他人所说。

相关问题