如何观察JS的事件队列的执行划分
也就是说,不同的操作函数,操作符,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的事件队列的执行划分的更多相关文章
- JS引擎线程的执行过程的三个阶段(二)
继续JS引擎线程的执行过程的三个阶段(一) 内容, 如下: 三. 执行阶段 1. 网页的线程 永远只有JS引擎线程在执行JS脚本程序,其他三个线程只负责将满足触发条件的处理函数推进事件队列,等待JS引 ...
- JS的解析与执行过程
JS的解析与执行过程 全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处 ...
- js中的延迟执行和定时执行
在js中,延迟执行函数有两种,setTimeout和setInterval,用法如下: function testFunction(){Console.log('hovertree.com');} s ...
- [转]js中confirm实现执行操作前弹出确认框的方法
原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在 ...
- JS匿名函数自执行函数
JS匿名函数自执行函数:(function(){})();(function(){}) 这是一个函数,函数后面接(),则是调用函数 比如(function(arg){console.log(arg); ...
- js判断浏览器类型 js判断ie6不执行
js判断浏览器类型 $.browser 对象 $.browser.version 浏览器版本 var binfo = ''; if ($.browser.msie) { binfo = " ...
- JS延时一秒执行
//JS延时一秒执行 setTimeout(function(){ window.history.go(0); }, 1000);
- js解析器的执行原理
首先看一段代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- JS引擎线程的执行过程的三个阶段(一)
浏览器首先按顺序加载由<script>标签分割的js代码块,加载js代码块完毕后,立刻进入以下三个阶段,然后再按顺序查找下一个代码块,再继续执行以下三个阶段,无论是外部脚本文件(不异步加载 ...
随机推荐
- 2015安徽省赛 I.梯田
http://xcacm.hfut.edu.cn/problem.php?id=1213 set + 搜索 姐姐是用搜索+二分做的,效率要高很多 #include<iostream> #i ...
- hibernate日常BUG总结
在使用hibernate自动生产表的时候失败, 是配置文件我是从别地方拷贝过来忘记更改,所以报了这个错误. 重新命名了生成表的名称,问题解决! 问题很明显,自动增长的主键应该使用整型. 这里写的是St ...
- java文件压缩和解压
功能实现. package com.test; import java.io.File; import java.io.BufferedOutputStream; import java.io.Buf ...
- Hibernate 多对多关联查询条件使用
from Brand as b inner join fetch b.styles as s where s.styleId=?
- WCF 定制自己的签名验证逻辑
关键点: 1. 保证在客户端设置签名. client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentU ...
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法
Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...
- Additive Number
Additive number is a string whose digits can form additive sequence. A valid additive sequence shoul ...
- NGUI 不写一行代码实现翻拍效果
正面UI添加一个TweenRotation组件,取消掉Active状态 ,To参数改成0,90,0) 背面UI添加一个TweenRotation组件,取消掉Active状态, From参数改成0,27 ...
- echo 单引号和双引号
echo输出 $key=value echo "$key" echo 后面带双引号的话,双引号里面的内容会翻译,输出value echo '$key' echo后面带单引号的话,双 ...
- 9. javacript高级程序设计-客户端检测
1. 客户端检测 1.1 能力检测 在编写代码之前先检测特定浏览器的能力. 1.2 怪癖检测 怪癖实际上是浏览器实现中的bug 1.3 用户代理检测 通过检测用户代理字符串来识别浏览器.用户代理字符串 ...