在闭包内中断for循环

Break for loop inside closure

本文关键字:for 循环 中断 闭包      更新时间:2023-09-26
for (var e = 0; e < markers.length; e += 1) {
    (function (e, markers, latLngBounds) {
        if (latLngBounds.contains(markers[e])) {
            updatePrompt("Marker is contained");
            // Break for loop
        }
    })();
}

在上面的例子中,在调用updatePrompt方法之后,我如何跳出包含闭包的循环?

var broken = false;
for (var e = 0; e < markers.length; e += 1) {
    if (broken) {
        break;
    } else {
        (function (e, markers, latLngBounds) {
            if (latLngBounds.contains(markers[e])) {
                updatePrompt("Marker is contained");
                broken = true;
            }
        })();
    }
}

有点啰嗦,但你明白了。

这也可以在现代浏览器的Array.some中完成

markers.some(function(marker) {
    if (latLngBounds.contains(marker)) {
        updatePrompt("Marker is contained");
        return true;
    }
    return false;
});

不确定是否正确,但如果你想打破循环集e = markers.length;

循环不会在此语句之后继续

另一种说法:

for (var e = 0; e < markers.length; e += 1) {
    if ((function (e, markers, latLngBounds) {
        if (latLngBounds.contains(markers[e])) {
            updatePrompt("Marker is contained");
            return 1;
        }
        return 0;
    })())
        break;
}