在JavaScript中,从主线程和回调中调用函数是一种好的风格吗

Is it good style in JavaScript to call a function from the main thread and in a callback

本文关键字:一种 风格 函数 JavaScript 线程 调用 回调      更新时间:2024-04-05

所以我对JavaScript非常陌生,我知道它没有真正的并发线程。但是,如果您想象一个ajax回调在其自己的线程中,并且该回调在屏幕上绘制一些按钮,然后调用一个函数wire_up_buttons(),该函数为所有可用按钮上的单击事件设置回调。从主线程(即从$(document).ready(callback)开始的执行)调用该函数是一种好的风格吗?

如果这被认为是糟糕的风格,那么你会建议我如何更改代码?

这不是风格的问题。如果在ajax调用完成之前从$(document).ready(callback)调用wire_up_buttons,按钮将不在那里,也不会连接起来。(假设wire_up_buttons直接在按钮上挂起事件。)

您有两个正确的选项:

  1. 呈现新按钮后,从ajax成功处理程序调用wire_up_buttons

  2. 使wire_up_buttons在按钮所在的容器上使用事件委派,在这种情况下,从ready处理程序调用它(如果您想使用它)可能是最好的做法。

事件委派是指将事件实际挂接到一个元素上,该元素是按钮的祖先元素,理想情况下是一些相当本地化的容器,但您可以使用documentdocument.body(因为它们是页面上所有内容元素的祖先)。jQuery的on处理程序支持事件挖掘;它的文档中有更多的信息。


旁注:

  • "我知道[JavaScript]没有真正的并发线程。"这是环境的问题,而不是语言问题。浏览器通过网络工作者为JavaScript提供真正的并发线程;它们提供单个UI线程,但可能提供多个非UI线程。JavaScript语言在线程主题上基本上是沉默的。JavaScript是单线程的报告很常见,但不正确。

  • 在控制script标记的位置的代码中,ready在很大程度上是不必要的。如果您这样做了,只需将script标记放在HTML的末尾,刚好在关闭</body>标记之前,在这种情况下就不需要ready了。更多关于YUI加速网站的最佳实践。

相关文章: