微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript – 了解setTimeout

我正在使用 Javascript中的setTimeout.我对它是如何工作感到困惑.我有以下代码

<input type="button" value='click'>

<script>
var input = document.getElementsByTagName('input')[0]

input.onclick = function() {
  setTimeout(function() { 
    input.value +=' input'  
  },0)
}

document.body.onclick = function() {
  input.value += ' body'
}
</script>

单击该函数时,它会将文本正文输入附加到按钮元素.我理解这种情况正在发生,因为首先触发了父(body)事件,并且在下一个计时器滴答时,子事件(输入)事件被执行,因为它稍后在事件队列中被推送.

我现在尝试了以下代码

var input = document.getElementsByTagName('input')[0]

document.body.onclick = function() {
  setTimeout(function() { 
    input.value +=' body'  
  },0)
}

input.onclick = function() {
  setTimeout(function() { 
    input.value +=' input'  
  },0)
}

这会将文本输入主体附加到按钮元素.当两个超时都设置为0时,如何确定执行顺序?在这种情况下,它们以什么顺序推送到事件队列?谢谢.

解决方法

首先在最里面的元素上触发点击然后冒泡.

因此,在您的第一个示例中,首先触发点击输入,但由于setTimeout不会立即执行,而是将其添加到队列中,从而触发并执行正文上的事件.

现在第二种情况是解释性的,首先触发输入,并且由于setTimeout它将执行添加到队列,但是当触发文档上的事件时它会执行相同的操作,现在执行队列因此首先执行输入然后执行文档事件,

这是因为JavaScript是单线程的,因此一旦触发了setTimeout,它就会将函数推送到队列并等待超时并转而执行它.

参考进一步阅读W3.org Link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐