也就是说,不同的操作函数,操作符,JS将其放入事件队列是不一样的。。。

比如:

外部函数和内部函数,就是分两次放入事件循环的尾端的。

比如,多个操作符组成的链式操作,也有可能是放不同的操作批次进入事件循环链的。

因为下面代码中的输出就显示了异步事件循环在JS当中的体现。

好好体味了一个小时。

var test = function() {

    for(var i = 0; i < 5; i++) {
        console.log(i+ " test outter");

        (function(i) {
          setTimeout(function() {
            console.log(i);
        }, 2000);
        })(i);

    }

};

var test2 = function() {
    var ret = [];
     for(var i = 0; i < 5; i++) {
       console.log(i+ " test2 outter");
        (function(i) {
          ret[i] = function() {
          console.log(i + " test2 inner");
          return i;
        }
        })(i);
      }
    console.log(ret);
    return ret;
};

var test0 = test(), test1 = test2()[2]();
var test2 = test2()[2](), test3 = test();

  输出:

"0 test outter"
"1 test outter"
"2 test outter"
"3 test outter"
"4 test outter"
"0 test2 outter"
"1 test2 outter"
"2 test2 outter"
"3 test2 outter"
"4 test2 outter"
[function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }]
"2 test2 inner"
"0 test2 outter"
"1 test2 outter"
"2 test2 outter"
"3 test2 outter"
"4 test2 outter"
[function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }, function () {
        window.runnerWindow.proxyConsole.log(i + " test2 inner");
        return i;
      }]
"2 test2 inner"
"0 test outter"
"1 test outter"
"2 test outter"
"3 test outter"
"4 test outter"
0
1
2
3
4
0
1
2
3
4

  

如何观察JS的事件队列的执行划分的更多相关文章

  1. JS引擎线程的执行过程的三个阶段(二)

    继续JS引擎线程的执行过程的三个阶段(一) 内容, 如下: 三. 执行阶段 1. 网页的线程 永远只有JS引擎线程在执行JS脚本程序,其他三个线程只负责将满足触发条件的处理函数推进事件队列,等待JS引 ...

  2. JS的解析与执行过程

    JS的解析与执行过程 全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处 ...

  3. js中的延迟执行和定时执行

    在js中,延迟执行函数有两种,setTimeout和setInterval,用法如下: function testFunction(){Console.log('hovertree.com');} s ...

  4. [转]js中confirm实现执行操作前弹出确认框的方法

    原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在 ...

  5. JS匿名函数自执行函数

    JS匿名函数自执行函数:(function(){})();(function(){}) 这是一个函数,函数后面接(),则是调用函数 比如(function(arg){console.log(arg); ...

  6. js判断浏览器类型 js判断ie6不执行

    js判断浏览器类型 $.browser  对象 $.browser.version 浏览器版本 var binfo = ''; if ($.browser.msie) { binfo = " ...

  7. JS延时一秒执行

    //JS延时一秒执行 setTimeout(function(){ window.history.go(0); }, 1000);

  8. js解析器的执行原理

    首先看一段代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  9. JS引擎线程的执行过程的三个阶段(一)

    浏览器首先按顺序加载由<script>标签分割的js代码块,加载js代码块完毕后,立刻进入以下三个阶段,然后再按顺序查找下一个代码块,再继续执行以下三个阶段,无论是外部脚本文件(不异步加载 ...

随机推荐

  1. spring和hibernate整合时无法自动建表

    在使用spring整合hibernate时候代码如下: <property name="dataSource" ref="dataSource" /> ...

  2. python 正则表达式点号与'\n'符号的问题

    遇到了一个小虫,特记录之. 1.正则表达式及英文的处理如下: >>> import re >>> b='adfasdfasf<1safadsaf>23w ...

  3. javascript特殊运算符

    in运算符                 in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数十一个对象或数组.如果该 运算符左边的值是右边对象的一个属性名,则返回true, ...

  4. jQuery DataTables && Django serializer

    jQuery DataTables https://www.datatables.net 本文参考的官方示例 http://datatables.net/release-datatables/exam ...

  5. 最近开始做Android了

    最近开始做Android,在学习的过程中发现找以前知识很不方便啊,于是决定以后还是把知识记录在博客里吧,说不定也能为他人提供参考!

  6. FFmpeg for XP(x86) 2016-03-23 static 静态编译程序

    FFmpeg for XP(x86) 2016-03-23 static 静态编译适用于32位XP系统,能加的扩展都加了,结果文件大小非常大. 最新版加了不少视频和音频滤镜. ffmpeg.20160 ...

  7. Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]

    平时用的都是Centos系统,今天偶然在Ubuntu下编译了一次代码,发现报错了: 源码: #include <stdio.h> #include <sys/time.h> # ...

  8. Linq查询

    //Linq查询 List<A1> a1 = new List<A1>(); a1.Add(, Name = , Gender = true }); a1.Add(, Name ...

  9. java 资源监控

    http://blog.csdn.net/huangzhaoyang2009/article/details/11860757 http://blog.csdn.net/cuker919/articl ...

  10. TCP UDP 协议的区别和联系

    TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起 ...