這就是Js的事件輪詢啦

概述

咱們都知道js是單線程的,一次只能執行一個任務,可是Js的執行環境(通常是瀏覽器),維護了一個事件對列。在Js的主線程執行的過程當中碰到Ajax或setTimeout等異步操做時,會把它們加入瀏覽器維護的事件隊列,當主線程執行完畢以後,會按順序去取事件隊列裏面的任務。git

上一張比較搓逼的圖

  • 1.執行主線程上面的代碼
  • 2.碰到Ajax,setTimeout等異步操做,將異步操做的回調函數加入事件隊列
  • 3.當主線程空閒依次去執行事件隊列裏面的任務
  • 4.如此往復,重複1,2,3

最後來一個例子啦

$(function () {

            console.log('----------First----------');

            $.ajax({
                url: 'https://api.apiopen.top/musicBroadcastingDetails?channelname=public_tuijian_spring',
                type: 'GET',
                success: function (str) {
                    console.log('----------Fourth-----------');
                }
            });

            setTimeout(function () {
                console.log('----------Third-----------');

            }, 0);

            console.log('----------Second-----------');

        });
複製代碼

這裏須要注意的是setTimeout(故意把延時設置爲0)的回調比Ajax的提早加入事件隊列, 實例地址https://github.com/fanxuewen/examples/tree/master/EventLoop
相關文章
相關標籤/搜索