从内部函数内部突破while循环'的身体
Breaking out of a while loop from within an inner function's body
如果我有:
while(foo) {
var x = bar.filter(function(){ /* any problems with using `break;` here to exit the while-loop? */ });
bar(), baz();
// and so on...
}
会有什么奇怪或意想不到的行为吗?
break
中断了它直接出现在其中的循环;如果函数(filter
迭代器)中的循环(或开关)外有break
,则是语法错误。
向while
添加一个条件,该条件由以下功能设置:
var stop = false;
while(foo && !stop) {
var x = bar.filter(function(){
if (someCondition) {
stop = true;
}
});
bar(), baz();
}
当然,也可以直接设置foo
:
while(foo) {
var x = bar.filter(function(){
if (someCondition) {
foo = false;
}
});
bar(), baz();
}
但我不知道foo
是什么,这是否合理。
如果您需要bar
和baz
在中断条件下不执行,则需要添加一个保护:
var stop = false;
while(foo && !stop) {
var x = bar.filter(function(){
if (someCondition) {
stop = true;
}
});
if (!stop) {
bar(), baz();
}
}
或
while(foo) {
var x = bar.filter(function(){
if (someCondition) {
foo = false;
}
});
if (foo) {
bar(), baz();
}
}
不能在while循环中的闭包函数中使用break
,但是,例如,可以使用false
作为显式返回值来向循环发出中断:
var count = 0,
foo = true;
while(foo) {
var bar = function() {
if (++count < 23) {
console.log(count);
return true;
} else {
return false;
}
};
if (bar() === false) { break; }
}
对于您的特定示例,因为filter
不会返回闭包函数的返回值,所以您必须通过将您在while
循环之外定义的值(例如foo
)设置为false来中断循环:
var count = 0,
baz = [1,2,3],
foo = true;
while(foo) {
var x = baz.filter(function(a) {
if (a > 2) {
foo = false;
}
return a < 3
});
}
如前所述,不能在函数体内使用break
。
但是,根据你试图实现的具体内容,你也可以切换你的逻辑,直到中断时才重复,而是在需要时从函数内触发下一次迭代:
function filterFunc() {
if (condition) {
iter();
}
}
function iter() {
var x = bar.filter(filterFunc);
bar(), baz();
}
相关文章:
- 对于循环-在循环内部循环,用于获取带有ascii值的字母表
- 可能只在for循环内部运行一次代码块
- 我可以从内部函数中产生吗?
- 从内部函数javascript内部分配外部函数的对象
- 将外部函数返回的id传递给内部函数
- 循环内部的递归函数未按预期工作
- 重复调用的同一函数会重置setTimeout内部函数
- 如何在 jquery 中循环这个函数
- Javascript中的内部函数作用域
- 两个循环JS函数相互冲突
- 对象内部函数内的对象文本的范围
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- while循环内部的函数
- 从内部函数内部突破while循环'的身体
- 循环内部的函数-如何正确执行
- Node.js中循环异步函数内部未定义的变量
- 循环内部的jQuery mouseover()函数赋值不正确
- 循环内部的动态函数:i var不可见
- 循环内部的函数(js/jquery)
- php脚本循环内部的onkeyup函数