00:00
呃,下面呢,我们要根据定时器呢,来去选一些东西,我们来看一看啊,啊,这里面有一个有一个问题啊,这个问题是什么呢?就是问的是定时器真的是定时执行的吗。是还是不是,你不要用反向思维来去想,这问你就按你你觉得是就是,你觉得不是他就不是是你看这不就是反向思维吗?好,这里说说定时,就是它指定的时间那个点上执行对吧?比如它指定一秒以后执行,那就应该一秒,而不能是1.5秒对吧?好,我们来看一下啊。
01:02
嗯,首先呢,我在这里面搞一个定时器晒太,发现指定时间多少呢?搞一个200吧,好吧,200行来,我在这里面写一个打印输出,我怎么知道是不是200呢?我得在前面准备点东西,握一个start,算一下当前的时间。怎么样得到时间?啊,有两种方式,第一种方式呢,New一个date.get time是不是当前的一个时间点啊,更简单的方式是怎么做呢?这个date它有一个作为一个对象,还有一个方法叫闹。其实一个效果是一样的啊,得到当前的时间值,大家时间是参照于什么,1970年1月1号啊,00:00:00那个时间的一个时间差值好。
02:15
下面我来去整这个我要打印的是不是我真正当前执行你这个大的时间呢?好,那我写一下定时器执行的下一步,我要算出一下那个时间怎么算。时间差,我把时间差放出来,跟这个200比一下就一样,Date点到再取一下时间减去什么是大的,我就把这个时间值给搞出来了吗?对不对,能懂不好能懂。那下面呢,我在这里写一个打印输出,这是启动定时器前可以吧,啊OK,好,下面再来一个。
03:12
还来一个啊,那这个是什么。是不后啊是不是啊是不是,那这三个打印输出应该什么顺序。启动前就是什么启动后最后才什么定时去执行,是不是啊是的,嗯,行好,而且我还还要做一个事情,我要看一下啊。我还准备说把这个启动定时器的这个操作全部都放在这个按钮的点击回调里面去怎写,我要把先把下面这些所有操作都放在点击按钮之后才做,怎么办?我先得到那个把按钮写什么B填接着给它干嘛,On和等于一个方写,接着把这里面所有的代码都放到这个里面,是这样的话。
04:13
是的是吧,好,现在我们就来看一看,看看是一个什么样的情况。哎,刚刚有了是吧。刷新一下,看一下日子现在输出了吗?没有因为我什么需要点。点。大家看一下,那这个时间准确吗?啊,你要说精确的准,他就不准确了,两百零一两百零二两百零三,其实说实话定时器啊。他一般会什么延迟那么一丁点,那一丁点是可以接受的。
05:07
能不能懂那一丁点是可以,就是说白了就是准确的。但是如果譬如说假设我现在指定的是200。他哥们他300才执行,你觉得合适吗?你觉得那个时候还是准确的吗?就不是了。对不对,那他有没有可能300或者甚至400才执行呢。来看到啊,现在看来还是好的,是不是现在看来好还是好的,下面我要做一件事情,我要做一个长时间的工作,怎么做长时间工作,大家说。怎么样才能让我下面做一张写的代码,它执行的时间相对长一点,宿主,宿主是占用空间大循环呐。
06:05
几个零,是不是八个零啊,我里面也不需要做什么,好,我先看啊,我也不知道这个时间多长,我先看一下是不是,哎呀,打开看看这个时间啊,先刷一下走。好像什么是差不多呀,没有什么影响吧,好有什么影响再加个零。你想想看,本来是200,我现在五百八了,我二不要了,就580,你觉得合适吧,他还是准确的吗?那这差了几倍了,这还准确。那也就是说,我们的定时器真的能保证定时吗?能不能,不能?
07:08
那也就是说他也有可能延迟来执行啊,这个延迟是在以前设定的时间基础上再有延迟,懂不懂啊,是在原有设定的时间上又有延迟,也是本来是两秒以后,200毫秒以后执行,现在已经是五百八了。啊,这个能接受吗?不能接受。那也就是说,定时器并不能真正保证什么真正定时执行。那这为什么呢?是吧,啊,这是为什么呢?首先我们得知道一件事情,定时器的回调函数是在分线的执行呢?还是在主线执行,也就是说这个函数的函数体。
08:01
是在哪个线程执行的主线程,因为我们写的JS代码,这里面所有写的所有写的前面我们写的JS代码都是在主线执行的,无论是非回调函数还是回调函数都是在主线上执行的。那我们至少能推断出来,之所以延迟执行是因为是这个原因。对吧,因为这个原因,那内部到底是怎么回事呢,对不对,其实我们能感觉到是这个问题。但是你现在去说到底为什么呢?你估计也说不清楚,你就一种感觉啊,单线才这个直线的特别长是吧?OK,这里面我们就要去说到后面要讲的一个东西叫事件循环模型啊,后面我们要讲这个东西,也就是说它是如何来去管理这个定时器,执行了它又是如何,现在这种情况下面又被延迟执行了。
09:05
大家至少先要知道定时器并不能什么。真正保证历史。这以这是我们先通过它呢,来提出这样一个概念啊呃,这个里面我们要要去真正的去理解它需要我们去理解我们后面要讲的世界循环模型。
我来说两句