gpt4 book ai didi

javascript - Javascript 默认是同步(阻塞)还是异步(非阻塞)

转载 作者:IT老高 更新时间:2023-10-28 22:06:33 24 4
gpt4 key购买 nike

我正在尝试掌握 Javascript 异步函数和回调。

我陷入了回调函数的概念,我正在阅读一些地方:它们用于顺序执行代码(主要在 jquery 的上下文中,例如动画)和一些特别在 Nodejs 的上下文中的地方;它们用于并行执行异步并避免代码阻塞。

那么,该主题的专家能否阐明这一点并清除我心中的这个模糊问题(示例??)。 所以我可以考虑使用回调函数

或者这完全取决于您在代码中调用/放置回调函数的位置? .

谢谢,

P.S:我担心这个问题会很主观,但我仍然可以期待具体的答案(也许是一些例子)

编辑:实际上这是来自互联网的例子,这让我模棱两可:

function do_a(){
// simulate a time consuming function
setTimeout( function(){
console.log( '`do_a`: this takes longer than `do_b`' );
}, 1000 );
}

function do_b(){
console.log( '`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`' );
}

do_a();
do_b();

结果

`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`
`do_a`: this takes longer than `do_b`

根据我的理解,当 JS 是顺序的时,do_b 应该总是在 do_a 之后。

最佳答案

JavaScript 的核心在很大程度上是同步的,因为函数在完成之前完全完成它们的任务。在 AJAX 出现之前,实际上只有 setTimeout 和 setInterval 提供了异步行为。

但是,很容易忘记事件处理程序实际上是异步代码。附加处理程序不会调用处理程序代码,并且直到将来某个不可知的时间才会执行该代码。

然后是 AJAX,它调用服务器。这些调用可以配置为同步调用,但开发人员通常更喜欢异步调用并使用回调方法来实现它们。

然后,我们看到了 JS 库和工具包的激增。这些努力使不同浏览器的事物实现同质化,并建立在异步代码的回调方法之上。您还开始看到更多用于数组迭代或 CSS 查询结果处理之类的同步回调。

现在,我们看到了 Deferred 和 Promise 的混合。这些对象代表长时间运行的操作的值,并提供 API 用于在该值到达时处理该值。

NodeJS 倾向于异步处理许多事情;这是真的。然而,这更多是他们的设计决定,而不是 JS 的任何固有异步性质。

关于javascript - Javascript 默认是同步(阻塞)还是异步(非阻塞),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16523870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com