从对Ajax的异步Javascript的setTimeoutsetInterval
setTimeout和setInterval的执行首先让我们看看下面的代码打印结果
(1)console.log;
setTimeout(function(){ console.log(2);},100)
setTimeout(function(){ console.log(3);},50)
(4)console.log;
打印结果是1, 4, 3,2,你可能认为原因是正确的。让我们看下面的例子。
(1)console.log;
setTimeout(function(){ console.log(2);},0)
(3)console.log;
这次将是什么结果
1, 3, 2,不是1, 2, 3,你可能会感到困惑。显然,计时器设置时间为0,浏览器解析JS从上到下执行。应该是1, 2和3。
这里我们要提到浏览器的线程问题。
有三个与JS相关的浏览器线程(注意:JS解析是单线程)JS代码执行线程(主线程)——UI渲染线程事件线程线程。
JS代码的执行线程和UI渲染线程是互斥的,即JS代码执行的线程上运行,绘制UI线程会停止工作,以防止JS DOM操作将导致两个线程和线程冲突;事件循环的特殊性,然后解释根据实施过程settimerout作用。
回到上面的第一个主题
(1)console.log;
setTimeout(function(){ console.log(2);},100)
setTimeout(function(){ console.log(3);},50)
(4)console.log;
实施过程:
JS主线程运行,满足console.log(1),直接运行,并输出结果在控制台;
主线程继续运行,然后满足第一setTimeout。然后在setTimeout回调函数将事件队列。
在二setTimeout回调函数的情况下,仍然是添加到事件队列。
执行console.log(4),其中主线任务完成后,除了在setTimeout回调函数;
此时,我们还没有解释事件循环线程开始工作,它将循环遍历事件队列(也就是我们的备忘录)。如果事件队列中有回调函数,它将将事件队列中的回调函数返回到主线程。
主线程接收回调函数,然后从函数体。(注意这里,因为两setTimeout本身的执行时间,所以这里将顺序执行根据时间的长度)
的setInterval原理是它是相同的,不是说出来的。
在一般情况下,执行所有任务的setTimeout和setInterval执行主线程将等到所有,将执行回调,所以用他们注意,尤其是当有一个特别耗时的任务在主线程中,两个定时器将延迟和不可预知的。
你觉得这个怎么样
嗯,这是异步的。不觉得有点异步执行setTimeout但由于必须在主线程完成之前执行它,所以可以称为伪异步。
说到异步,我们也会想到Ajax,所有这些都说Ajax是异步的,但是它的异步原理不明确,你应该对它有点兴趣。
异步:简单地说,在处理某事时你可以做其他事情。例如,当你在银行里取一个号码时,你可以等待钱。你可以在等待过程中使用手机和其他人聊天。这个过程是异步的。
ajax异步原理
当发送Ajax请求时,浏览器将有一个特殊的线程来完成任务;
在ajax中,有回调函数。例如,回调请求成功后,回调失败后,这些回调函数会被推到事件队列就像在setTimeout回调。
浏览器将再次提供一个县镇来接收Ajax请求返回的数据;
事件循环线程知道,事件队列中Ajax的回调函数可以执行,遍历事件队列,并将回调函数返回到JS主线程。
主线程执行Ajax回调函数的内部代码。
一般来说,ajax的请求不会影响主线程任务的执行。它有自己的专用线程来处理它的任务,就像浏览器的儿子一样。
以上是对Javascript的简要介绍,从setTimeout和setInterval AJAX异步。我希望能帮助你。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站。