For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
JavaScript编程开发语言是目前大多数软件开发程序员都应该熟练掌握的编程技术,下面我们就通过案例分析来了解一下,JavaScript执行都有哪些常见问题。
同步与异步
由于JavaScript是单线程的,这就决定了它的任务不可能只有同步任务,那些耗时很长的任务如果也按同步任务执行的话将会导致页面阻塞,所以JavaScript任务一般分为两类:
同步任务
同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务
异步任务指的是,不进入主线程、而进入"任务队列"(Eventqueue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
常见的异步任务:定时器,ajax,事件绑定,回调函数,promise,asyncawait等
同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入EventTable并注册函数。
当EventTable中指定的事情完成时,会将这个函数移入EventQueue。
主线程内的任务执行完毕为空,会去EventQueue读取对应的函数,进入主线程执行。
上述过程会不断重复,也就是常说的EventLoop(事件循环)。
我们不禁要问了,那怎么知道主线程执行栈为空啊?js引擎存在monitoringprocess进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去EventQueue那里检查是否有等待被调用的函数。
事件循环(Event-Loop)
同步任务直接放入到主线程执行,异步任务(点击事件,定时器,ajax等)挂在后台执行,等待I/O事件完成或行为事件被触发。
系统后台执行异步任务,如果某个异步任务事件(或者行为事件被触发),则将该任务添加到任务队列,并且每个任务会对应一个回调函数进行处理。
这里异步任务分为宏任务与微任务,宏任务进入到宏任务队列,微任务进入到微任务队列。
执行任务队列中的任务具体是在执行栈中完成的,当主线程中的任务全部执行完毕后,去读取微任务队列,如果有微任务就会全部执行,然后再去读取宏任务队列
上述过程会不断的重复进行,也就是我们常说的事件循环(Event-Loop)。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。