数码资讯
setTimeout和setInterval的深刻理解
大约半年前,我发表了一篇关于setTimeout和setInterval,但现在回去,发现有很多的缺点和错误。事实上,setTimeout和setInterval不是我们从字面上理解的那样简单。要真正掌握和了解这两种方法,你必须谈论Javascript单线程机制。 { } setTimeout和se
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
大约半年前,我发表了一篇关于setTimeout和setInterval,但现在回去,发现有很多的缺点和错误。事实上,setTimeout和setInterval不是我们从字面上理解的那样简单。要真正掌握和了解这两种方法,你必须谈论Javascript单线程机制。
{ } setTimeout和setInterval是如何工作的
我们知道,JS是由一个单独的线程中执行,所以setTimeout和setInterval所谓异步调用实际上是通过插入代码段的代码执行队列的实现。
你如何计算插入的时间点自然是用我们说,定时器,定时器,当setTimeout和setInterval定时器准确执行,将根据您设置的时间找到代码的插入点。当队列通常执行的插入点,定时器回调触发,即我们设置回调功能:
复制代码代码如下所示:
函数FN(){
*
下面是一些代码
* /
setTimeout(){ alert(功能(好!)},1000);
}
上面的例子是我们通常使用的,应该很容易理解,但是计时器真的那么准确吗代码队列的执行是否真的如此正常
{知道所谓的异步。
它已经知道,事实上,延迟执行setTimeout和setInterval简单实现(或异步执行)插入代码到代码队列。但事实上,所谓的不只是一个幻想,它运行在一个线程以及!
所以问题是,如果代码插入点超过传入setTimeout或setInterval设定时间在代码执行的时间吗让我们看看这个代码:
复制代码代码如下所示:
函数FN(){
setTimeout(函数(){ alert(你看见我');},1000);
当(真){ }
}
您认为执行此代码的结果是什么答案是,警报永远不会出现。
为什么会这样因为时间代码还没有完成,所以在后面插入的代码将永远不会执行。
总之,事实上,JS是一个单线程的产品。在任何情况下,不可能突破单线程。很多异步调用(包括AJAX)实际上只是伪异步的。只要我们了解这样一个概念,它可能不难理解setTimeout和setInterval。
{ } setTimeout和setInterval是如何工作的
我们知道,JS是由一个单独的线程中执行,所以setTimeout和setInterval所谓异步调用实际上是通过插入代码段的代码执行队列的实现。
你如何计算插入的时间点自然是用我们说,定时器,定时器,当setTimeout和setInterval定时器准确执行,将根据您设置的时间找到代码的插入点。当队列通常执行的插入点,定时器回调触发,即我们设置回调功能:
复制代码代码如下所示:
函数FN(){
*
下面是一些代码
* /
setTimeout(){ alert(功能(好!)},1000);
}
上面的例子是我们通常使用的,应该很容易理解,但是计时器真的那么准确吗代码队列的执行是否真的如此正常
{知道所谓的异步。
它已经知道,事实上,延迟执行setTimeout和setInterval简单实现(或异步执行)插入代码到代码队列。但事实上,所谓的不只是一个幻想,它运行在一个线程以及!
所以问题是,如果代码插入点超过传入setTimeout或setInterval设定时间在代码执行的时间吗让我们看看这个代码:
复制代码代码如下所示:
函数FN(){
setTimeout(函数(){ alert(你看见我');},1000);
当(真){ }
}
您认为执行此代码的结果是什么答案是,警报永远不会出现。
为什么会这样因为时间代码还没有完成,所以在后面插入的代码将永远不会执行。
总之,事实上,JS是一个单线程的产品。在任何情况下,不可能突破单线程。很多异步调用(包括AJAX)实际上只是伪异步的。只要我们了解这样一个概念,它可能不难理解setTimeout和setInterval。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。