zoukankan      html  css  js  c++  java
  • 浏览器Event Loop 是个什么鬼

    首先我建议你去看看阮神的相关blog

    下面我只想拿一些例子来说明问题,我不是很喜欢艰深的理论,那不够直接.

    look:

    setTimeout(function(){console.log(1)},0);

    console.log(2)

    上面的代码执行的顺序是  2 1 

    尽管定时器是0秒,还是延迟执行了,而且这个规则不会变.

    look:

    setTimeout(function(){console.log(1)},0);

    console.log(2);

    setTimeout(function(){console.log(3)},0);

    上面的运行顺序是: 2 1 3 

    look:

    setTimeout(function(){
    console.log(1)

    setTimeout(function(){console.log(3)},0);


    },0);

    console.log(2);

    这个还是 2 1 3

    look 更复杂的:

    setTimeout(function(){
    console.log(1);

    setTimeout(function(){console.log(3);},0);


    },0);

    console.log(2);

    setTimeout(function(){
    console.log(4);

    setTimeout(function(){console.log(5);},0);


    },0);

    结果是 2 1 4 3 5

    怎么解释呢:  

    console.log 是在主任务栈中执行的,而setTimeout 则是先在任务队列中排队的.

    等主任务栈执行完毕了,才会按照任务队列去执行任务队列的任务.

    上面setTimeout 排队会先排 1 4 然后排 3 5.所以 执行了 2 14 35.

    这个也是javascript 被用于nodejs 的一个核心特性.

  • 相关阅读:
    组合模式
    迭代器模式
    模板方法模式
    外观模式
    适配器模式
    运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist
    idea maven 打包 引用本地jar
    centos7 安装redis
    centos7 防火墙
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/xuezizhenchengxuyuan/p/6881626.html
Copyright © 2011-2022 走看看