这是我的测试:
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 :(得分: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
。