Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,从主线程和回调调用函数是一种好的风格吗_Javascript_Jquery_Ajax_Multithreading_Http - Fatal编程技术网

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

在JavaScript中,从主线程和回调调用函数是一种好的风格吗,javascript,jquery,ajax,multithreading,http,Javascript,Jquery,Ajax,Multithreading,Http,所以我对JavaScript非常陌生,我知道它没有真正的并发线程。但是如果您想象一个ajax回调在它自己的线程中,并且该回调在屏幕上绘制一些按钮,然后调用一个函数wire\u up\u buttons(),该函数为所有可用按钮上的单击事件设置回调。从主线程调用该函数(即从$(document).ready(callback)开始的执行)是一种好的样式吗 如果这被认为是糟糕的风格,那么您会建议我如何更改代码?这不是风格的问题。如果您从$(文档)调用wire\u按钮。ready(callback)在

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


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

这不是风格的问题。如果您从
$(文档)调用
wire\u按钮
。ready(callback)
在ajax调用完成之前,按钮将不在那里,它们也不会连接起来。(假设
wire\u up\u按钮
将事件直接挂接到按钮上。)

您有两个正确的选项:

  • 呈现新按钮后,从
    ajax
    成功处理程序调用
    wire\u up\u按钮

  • 使
    wire\u-up\u按钮
    在一个容器上使用事件委托(按钮都在其中),在这种情况下,从
    ready
    处理程序调用它(如果您想使用一个)可能是最好的做法

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


    旁注:

    • “我知道[JavaScript]没有真正的并发线程。”这是一个环境问题,而不是语言问题。浏览器通过为JavaScript提供真正的并发线程;它们提供一个UI线程,但可能有几个非UI线程。JavaScript语言本质上不涉及线程。JavaScript是单线程的报告很常见,但不正确

    • ready
      在您控制
      script
      标记的位置的代码中基本上是不必要的。如果您这样做,只需将
      script
      标记放在HTML的末尾,就在关闭
      标记之前,在这种情况下不需要
      ready
      。更多信息请参阅


    这不是风格的问题。如果您从
    $(文档)调用
    连接按钮
    。准备好(回调)
    在ajax调用完成之前,按钮不会在那里,也不会连接。(假设
    连接按钮
    直接在按钮上挂起事件。)

    您有两个正确的选项:

  • 呈现新按钮后,从
    ajax
    成功处理程序调用
    wire\u up\u按钮

  • 使
    wire\u-up\u按钮
    在一个容器上使用事件委托(按钮都在其中),在这种情况下,从
    ready
    处理程序调用它(如果您想使用一个)可能是最好的做法

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


    旁注:

    • “我知道[JavaScript]没有真正的并发线程。”这是一个环境问题,而不是语言问题。浏览器通过为JavaScript提供真正的并发线程;它们提供一个UI线程,但可能有几个非UI线程。JavaScript语言本质上不涉及线程。JavaScript是单线程的报告很常见,但不正确

    • ready
      在您控制
      script
      标记的位置的代码中基本上是不必要的。如果您这样做,只需将
      script
      标记放在HTML的末尾,就在关闭
      标记之前,在这种情况下不需要
      ready
      。更多信息请参阅


    不坏也不好。这取决于您在命令块中所做的操作。不坏也不好。这取决于您在命令块中所做的操作。感谢您的回答!目前我的
    连接按钮
    功能只是将按钮连接到“ID”从ajax回调中获取的按钮。然后在这些按钮上注册回调。它还可以在其他按钮上注册回调。请在此上下文中解释事件委派。我认为我的问题不够清楚。我正在调用
    wire\u-up\u buttons()
    函数在ajax请求之前以及在回调中都可以使用。因此总会有一些事情发生谢谢你的回答!目前,我的
    连接按钮
    函数只是将按钮连接到“ID”从ajax回调中获取的按钮。然后在这些按钮上注册回调。它还可以在其他按钮上注册回调。请在此上下文中解释事件委派。我认为我的问题不够清楚。我正在调用
    wire\u-up\u buttons()
    函数在ajax请求之前以及回调中执行。因此总会发生一些事情