Javascript 为什么HTMLDOM事件没有';不立即影响同一DOM元素吗?

Javascript 为什么HTMLDOM事件没有';不立即影响同一DOM元素吗?,javascript,html,pure-js,Javascript,Html,Pure Js,我正在编写代码,以便在执行click事件时更改Button元素的值 但在完成之前,它不会影响button元素的值 我附上了小提琴,这会让你很好地了解我在说什么 function myFunction() { document.getElementById("demo").innerHTML = "Hello World"; alert('hi') } 即使按钮元素innerHTML在发出警报之前已更改,它也不会影响UI 如何完成,在执行警报之前,我需

我正在编写代码,以便在执行click事件时更改Button元素的值

但在完成之前,它不会影响button元素的值

我附上了小提琴,这会让你很好地了解我在说什么

function myFunction() {
 document.getElementById("demo").innerHTML = "Hello World";
 alert('hi')
}
即使按钮元素innerHTML在发出警报之前已更改,它也不会影响UI

如何完成,在执行警报之前,我需要更改按钮文本


谢谢。

这是因为Javascript线程执行会停止,直到您单击警报中的确认按钮。你会说:为什么?如果之前执行过HTML更改指令。虽然执行了Javascript代码,但浏览器仍然没有在DOM中进行更改。

在JS中最接近线程的是settimeout函数,这样做是不合适的,但如果使用它,会是什么样子

 function myFunction() {
  document.getElementById("demo").innerHTML = "Hello World";
  setTimeout(function(){
      alert('hi')
  },1000)
}

有关其发生原因的正确解释,请参阅

TL;see博士

以下是如何快速修复此问题

setTimeout(_=>alert('hi'))

您可以监听按钮值的变化,并在变化后发出警报,或者我错了吗?@D.Schaller不,这是一个更好的主意。但是JS这种行为的原因是什么?我不会称之为“线程执行”,因为这可能会让人困惑——JavaScript没有真正的线程。是的,JavaScript执行是一个单线程进程,但线程是一个线程,对吗?线程通常是一个进程的组件,可以由调度程序独立管理。虽然您所说的在技术上是正确的,但在本文中提到它可能会让人困惑,因为JavaScript没有底层线程的概念或访问底层线程的权限。这可能没什么关系,但我只想说“JavaScript执行暂停”或“JavaScript引擎暂停”