layui.each不支持break和continue,仅通过return false终止遍历、return true跳过当前项;需提前退出并返回值时,应改用find()、for循环或filter()等原生方法。

layui.each 里不能用 break 和 continue
layui 的 layui.each 是一个纯函数式遍历工具,内部基于 for 循环封装,但**不支持 break 或 continue 语句**。直接写会报错:SyntaxError: Illegal break statement 或类似提示。它的回调函数是普通函数调用,不是原生循环上下文,所以语言级控制流关键字失效。
return false 是唯一合法的“break”等效操作
和 jQuery 的 $.each 类似,layui.each 遵循“返回值即控制指令”的约定:
-
return false:立即终止整个遍历,效果等同于break -
return true:跳过当前项,继续下一次迭代,效果等同于continue - 其他返回值(包括
return、return undefined、无 return):不做特殊处理,继续执行
示例:
layui.each([1, 2, 3, 4, 5], function(i, item) {
if (item === 3) {
return false; // 遍历立刻停止,i=2 后不再执行
}
console.log(item); // 输出:1, 2
});
return true 跳过当前项时容易忽略的细节
return true 看似简单,但有两个实际坑点:
- 它只跳过「当前回调执行」,不跳过索引递增——也就是说,下一轮
i仍是自动 +1,不会重复处理同一索引 - 如果在 DOM 操作或异步逻辑中误用
return true,可能造成状态不一致,比如本该收集 5 个元素,中间跳过 2 个却忘了调整计数器 - 注意不要和
return(无值)混淆:return是退出当前回调,但不触发跳过逻辑;只有return true才被 layui 解析为 continue 行为
需要提前退出且带返回值?别硬套 layui.each
如果你的场景既要提前终止,又需要从循环中“带出一个结果”(比如找到第一个匹配项就返回该对象),layui.each 就不是最佳选择。它设计上不提供返回值机制,所有数据传递都得靠闭包变量。
更稳妥的做法是换用原生方法:
- 找单个匹配项 → 用
Array.prototype.find() - 需要索引和短路 → 用传统
for循环,配合break - 条件过滤后遍历 → 先
filter()再forEach(),语义清晰也不易出错
强行在 layui.each 里用闭包变量 + return false 虽可行,但可读性差,后续维护的人容易漏看那个 return false 的条件分支。











