如何让另一个函数知道循环名称,这样它就可以破坏它



您可以看到我有这段代码。(https://jsfiddle.net/kg4f2bu0/)。

在我的iterate函数中,我为循环使用了一个标签,因为如果它满足一个条件,我想打断它。在回调函数中检查条件。我想中断回调函数(compare(中的for..of循环。但它不承认声明标签。如何让回调函数知道循环名称?

这是JavaScript代码。您可以在此处阅读标签名称信息:https://javascript.info/while-for#labels-中断-继续

const myArr = [1, 2, 3, 4, 5, 6];
const iterate = (arr, callback) => {
search: for (const item of arr) {
callback(item)
}
}
const compare = (num) => {
console.log(num);
if (num === 4) {
console.log("breaking");
break search;
}
}
iterate(myArr, compare)

不能从另一个函数内部中断循环。原因是技术性的:在代码开始运行之前,break的标签被解析一次。所以在运行时,它只是一个简单的";goto";;JavaScript引擎不会在调用堆栈中查找包含匹配标签的函数。(如果没有怎么办?如果有多个怎么办?(

相反,您可以返回一个布尔值,指示是否找到了该项,从而指示循环是否应该中断:

const myArr = [1, 2, 3, 4, 5, 6];
const iterate = (arr, callback) => {
for (const item of arr) {
if (callback(item)) {
break;
}
}
}
const compare = (num) => {
console.log(num);
if (num === 4) {
console.log("breaking");
return true;
}
return false;
}
iterate(myArr, compare)

使用Array.every((执行循环。一旦返回False,循环就会结束。下面是一个例子。

const myArr = [1, 2, 3, 4, 5, 6];
const iterate = (arr, callback) => {
search: arr.every(compare) 
}
const compare = (num) => {
console.log(num);
if (num === 4) {
console.log("breaking");
return false;
}
return true;
}
iterate(myArr, compare)

相关内容

最新更新