A loop maintaining a boolean flag to decide when to stop — `let found = false; for (...) { if (!found && ...) { ...; found = true; } }`.
Loops that maintain a boolean to decide when to stop replace it with a direct `break`, `return`, or `continue`.
Before the refactoring
let found = false;for (const p of people) {if (!found && p.name === target) {matched = p;found = true;}}
After the refactoring
for (const p of people) {if (p.name === target) {matched = p;break;}}
The exit condition is delayed and obscured; reasoning about when the loop terminates requires tracking the flag's state through every iteration; bugs hide where the flag isn't set when expected.
If the loop body is large, the break can hide the early-exit semantics — extract a function around the loop's body to keep the exit obvious.
The exit condition appears at the moment it's decided, not as a delayed effect of a flag check; the loop's intent becomes literal.
Replacing a flag with a break in a large loop body — the exit point becomes hidden inside the body, and the loop's termination semantics become harder to read than the original flag.