js 异步和事件的执行问题
来源:互联网 发布:硬盘使用寿命 知乎 编辑:程序博客网 时间:2024/05/24 06:16
代码:
前期肯定是有预编译期和执行期,这些先不讨论了就,主要说的是这段代码的执行流程
1.是页面加载完成后获取box对象,然后执行函数调用addEvent函数
<!doctype html><html lang="en"><head><meta charset="UTF-8"><title>test</title><link rel="stylesheet" href="./style.css"></head><body><div class="box" id="aa">123aaaaaasdasdsadsadsadsadsadassssssssssssssssdasdasdasdasdasdddddddddddddd<div id="ee">444<div id="tt">555</div></div></div><script src="js/common.js"></script></body></html>
window.onload = function(){var box = document.getElementById('aa');addEvent(box,'click',function(){alert('ysx');});addEvent(box,'click',toBlue);}function toBlue(){this.className = 'pox';addEvent(this,'click',toRed);}function toRed(){this.className = 'box';addEvent(this,'click',toBlue);}function addEvent(obj,type,fn){var saved = null;if(typeof obj['on'+type] == 'function')saved = obj['on'+type];obj['on'+type] = function(){if(saved)saved();fn.call(this);}}
//流程整理:前期肯定是有预编译期和执行期,这些先不讨论了就,主要说的是这段代码的执行流程
1.是页面加载完成后获取box对象,然后执行函数调用addEvent函数
2.进入addEvent函数,顺序执行,直到遇到一个点击事件后,此时异步执行开始,function(){if(saved)saved();fn.call(this);}这段函数是异步去执行,并且把执行后的结果存在消息队列中,等待主进程来获取消息
3.主进程继续执行下一个addEvent函数调用,然后重复步骤2,因为是同一元素的同一事件,所以在消息队列中只会存在一个事件消息,可以想象成指针(每次让onclick指向堆内存中不同的函数,最后肯定只会执行第一个,但是如果你把对内存中的每个函数都记住自己的上一个,也就是saved指针的功能,相当于一个链表,这样就可以从最早的那个执行了,不会被覆盖)
4.主进程全部执行完成后,等待点击事件发生后,开始在消息队列中获取消息
PS:以上都是自己总结的,肯定漏洞百出,有兴趣的可以讨论一下啊
0 0
- js 异步和事件的执行问题
- 异步加载js和异步执行js的方法
- .net 服务器事件和客户端js事件的执行顺序
- js执行顺序和js异步
- JS异步代码执行和同步代码之间的关系
- setTimeout()和setInterval()看js的异步执行方法
- 理解Node.js的事件驱动和异步编程
- js异步执行用回调函数当参数和同步执行的区别的案例
- javascript 点击事件执行两次js问题
- js的ajax的异步和同步请求的问题
- node.js 事件循环 异步IO 和 非IO异步
- 异步方法中map、forEach和for循环中带来的异步执行问题
- setTimeout与js引擎的异步执行
- setTimeout与js引擎的异步执行
- setTimeout与js引擎的异步执行
- 破解由于异步执行而导致的JS插件未加载就使用的问题
- 解决js异步问题的方法--async和await(ES7)
- Button 控件的 OnClientClick 和 OnClick 事件执行顺序问题
- Linux下隐藏文件和显示隐藏文件命令
- 4412驱动-按键 蜂鸣器 流水灯
- HTTP 代理和反向代理
- windows DLL编程基础
- 在HTML中,如何设置新窗口打开和在原窗口打开? herf的属性
- js 异步和事件的执行问题
- Vue语法
- 破解软件试用版到期问题通用办法
- Problem B: STL——多重集的插入和删除
- bootstrap
- android开发---handler
- html5第七课时,块级盒子的垂直外边距合并
- caffe yolo移植
- [Leetcode] 122. Best Time to Buy and Sell Stock II 解题报告