The issue isn't that you're creating an infinite loop using the browser's dialogs, the library JSBin uses to execute your script uses a timeout as a heuristic to check for infinite loops.
Looking in the console, we can see this timeout is defined in runner.js. The GitHub repo for JSBin actually explains how this is done (render.js):
// Rewrite loops to detect infiniteness.
// This is done by rewriting the for/while/do loops to perform a check at
// the start of each iteration.
Unfortunately, I haven't been able to find the code that rewrites the loops, but chances are it rewrites your loop to look something like
let loopStart = Date.now();
for (let i = 0; i < 3; i++) {
if ((Date.now() - loopStart) >= MAX_LOOP_DURATION) {
loopProtect.hit();
break;
}
console.log(`i: ${i}`);
let foo = prompt('Enter anyting - it will be echoed.');
console.log(`echo: ${foo}`);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…