发表于: 2019-11-21 22:34:40
1 1071
今天完成的事:
如何阻止事件冒泡和默认事件?
JS的预解析与执行过程
明天计划的事:
准备复盘评审
写点js项目demo
遇到的问题:
暂无
收获:
什么是事件冒泡?
当事件发生后,这个事件就要开始传播(从里到外,或者从外向里)。为什么要传播呢?因为事件源本身(可能)并没有处理事件的能力,或处理事件的函数并未绑定在该事件源上。
js冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件的进一步传播。使用event.preventDefault()可以取消默认事件。
阻止默认事件
一共有如下三种方式:
//谷歌及IE8以上
e.preventDefault();
//IE8及以下
window.event.returnValue = false;
//无兼容问题(但不能用于节点直接onclick绑定函数)
return false;
1.event.stopPropagation()方法
这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,
2.event.preventDefault()方法
这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;
3.return false ;
这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()
何为预解析,这个主要是我们在编写js的时候, 还未执行前,js为我们储存的数据变量,js提前将我们的代码存到了它的内存当中
函数预解析:
1、javascript在执行前会进行类似“预解析”的操作:首先会创建一个在当前执行环境下的活动对象,并将那些用var 声明的变量、定义的函数设置为活动对象的属性 ,但是此时这些变量的赋值都是undefined。
2、在javascript解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到 而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。
全局代码处理过程
1、预解析阶段
- 1、读取整个源代码
- 2、先查找函数声明,在查找变量声明
- · 函数声明有冲突,会覆盖
- · 变量声明有冲突,会忽略
3、将找到的函数和变量保存到一个对象中(全局的保存到window对象中)
4、变量的值是undefined,函数的值则指向该函数(函数字符串)
· { a: undefined, f: ‘function(){…}’ }
2、运行阶段
从上至下,顺序执行
函数处理过程
1、预解析阶段
1、读取整个函数源代码
2、将函数的参数添加到词法对象中
3、先查找函数声明,再查找变量声明
· 若有重复的函数声明,则后面的会把前面的覆盖
· 若有重复的变量声明,
4、将找到的函数和变量保存到一个词法对象中
5、变量的值是undefined,函数的值则指向该函数(函数字符串)
· { a: undefined, f: ‘function(){…}’ }
2 、运行阶段
从上至下,顺序执行
评论