【Python全栈-JavaScript】js Event()对象
JavaScript同步和异步+宏任务和微任务+事件
同步和异步
所有的点击事件都是异步的
注意:所有事件函数(addEventListener)都不能return
/* * 同步和异步 * 同步,是指代码从上向下执行,执行完一条,才去执行下一条,是按照顺序按照步骤的执行 * * 异步,代码执行需要有一个过程,或者需要一定的时间,或者开始的时间不确定,这时候 * 我们先让别的不相关的代码执行,而当前代码当执行完成后去执行一个回调函数 * * * 注意:如果代码写在script中,并且写在函数外部,那么这个代码他只能执行一次,并且 * 是在开始时就同步执行了,显然这种方式不利于代码中出现交互,因此,代码就需要写在 * 函数中,减少代码之间同步执行方式。函数外通常仅用来定义变量(全局)和执行初始化函数 * * */
var sum=0; var bn=document.querySelector("button"); // 所有的事件都是异步 bn.addEventListener("click",clickHandler); function clickHandler(e) { sum++; oneFn(sum); //回调 // return sum; //注意:所有事件函数都不能return } function oneFn(sum) { console.log(sum,"1___"); twoFn(sum); } function twoFn(sum) { console.log(sum,"2___"); threeFn(sum) } function threeFn(sum) { console.log(sum,"3___"); }
宏任务和微任务
/* * 宏任务 setTimeout setInterval * 微任务 Promise (一共3个) * 同一个队列中,先执行的是宏任务,再执行其他任务,最后执行微任务 * * 在当前队列中出现的异步,如果是微任务就会放在当前任务队列最底端, * 如果当前队列出现的异步是宏任务,就会出现在下一个队列最顶端 * * 也就是说在同一个队列中触发异步,微任务先执行,宏任务后执行 * */
两道常考的笔试题:
// 重要程度:1 ,常考的笔试题 setTimeout(function () { new Promise(function (res, rej) { console.log("1"); res(); }).then(function () { console.log("2") }, function () { }); console.log("3") }, 0); // 2 console.log("4"); //结果:4 1 3 2 /* setTimeout(function () { console.log("1"); },0); new Promise(function (res,rej) { console.log("2");//同步执行 res(); }).then(function () { console.log("3");//异步执行 }); console.log("4") //同步执行 */ // 结果: 2 4 3 1
事件流程
事件触发的3个阶段
捕获阶段 ---> 目标阶段 ---> 冒泡阶段
-->
- 北京
- 昌平
- 沙河
- 城关
- 回龙观
- 天通苑
- 海淀
- 朝阳
- 东城
- 西城
- 昌平
- 山东
- 山西
- 河北
- 保定
- 石家庄
- 张家口
- 张北
- 崇礼
- 下花园
- 宣化
- 承德
- 邯郸
- 河南
- 郑州
- 许昌
- 洛阳
- 驻马店
- 信阳
- 罗山
- 竹竿镇
- 楠杆镇
- 子路镇
- 青山镇
- 灵山镇
- 莽张镇
- 周党镇
- 光山
- 息县
- 潢川
- 新县
- 正阳
- 商城
- 固始
- 淮滨
- 罗山