我希望 while 循环在我点击按钮后停止,但我的整个屏幕都被冻结了,而且窗口似乎对任何类型的事件都没有反应。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button>Click ME!</button>
<script>
const btn = document.querySelector("button");
let clicked = false;
btn.addEventListener("click", ()=>{
console.log("clicked");
clicked = true;
})
while(!clicked){
console.log("I am waiting")
}
</script>
</body>
</html>
答案 0 :(得分:0)
那是因为您的代码添加了一个事件侦听器(供以后使用),然后有一个循环等待 clicked
,但它实际上会阻止 addEventListener
的执行。当代码正在运行时(如您的循环),您(作为用户)甚至无法点击页面,即使可以,addEventListener
回调也会在循环结束后执行。所以这是一种僵局。
我建议您阅读 Event loop,它是 JavaScript 运行时的主要机制,以便更好地理解这一点。
答案 1 :(得分:0)
您的 while 循环立即运行且没有中断,并且会阻止代码执行
你可能是这个意思
const btn = document.querySelector("button");
let clicked = false;
btn.addEventListener("click", () => {
console.log("clicked");
clicked = true;
})
let iId = setInterval(function() {
if (clicked) clearInterval(iId); // clear the interval
else console.log("I am waiting"); // continue the interval
}, 1000)
<button>Click ME!</button>