Dom 事件和JavaScript的词法分析过程

简介:

dom自带了很多事件,常见的如下所示


wKiom1kbz3OzzmSXAAOLKOkh7Gc124.png

当触发这些事件的时候,我们可以执行自定义的各种函数。


一般说来,绑定事件有3种方法。


第一种方法,直接在标签上面绑定,比如

1
2
3
4
<input id= 'i1'  type= 'button'  onclick= 'ClickOn(this)' >
 
function  ClickOn(self){
}


第二种方法,是先获取Dom对象,然后进行绑定。比如

1
2
3
4
5
<input id= 'i1'  type= 'button'  >
 
document.getElementById( 'i1' ).conclick= function  ClickOn(){
 
}


第三种,则是通过 addEventListener() 绑定,这种方式可以绑定多个事件到一个点击操作上。他的第一个参数是click,第二个是匿名函数,第三个true表示从执行顺序从外到内,false表示从内到外


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html lang= "en" >
<head>
     <meta charset= "UTF-8" >
     <title>Title</title>
</head>
<style>
     #main{
         background-color: red;
         width:300px;
         height:400px;
     }
     #content{
         background-color: pink;
         width:150px;
         height:200px;
     }
</style>
<body>
     <div id= "main" >
         <div id= "content" ></div>
     </div>
     <script>
         var  mymain = document.getElementById( "main" );
         var  mycontent = document.getElementById( "content" );
         mymain.addEventListener( "click" , function (){console.log( "main" )}, true );
         mycontent.addEventListener( "click" , function (){console.log( "content" )}, true );
     </script>
</body>
</html>


当我们编写页面的时候,一个基本原则是行为(js) 样式(css) 和结构(html)都需要分离,因此第一种直接在标签上绑定样式和事件的方式应该尽量避免使用。


最后,再看看JavaScript的词法分析过程。


比如说,执行下面的函数,他的输出结果是首先输出function,然后27和27

1
2
3
4
5
6
7
8
       function  t1(age){
             console.log(age);  // function age()
             var  age = 27;
             console.log(age);  // 27
             function  age(){}
             console.log(age);  // 27
         }
         t1(3);


为什么会这样了,他的词法分析是三部分:

  1. 形式参数:这里首先创建AO.age=‘undefined’,然后AO.age=3;

  2. 局部变量:如果有AO.age了 不做改变,如果没有AO.age=undefined; 这里已经有了,因此不做改变

  3. 函数申明:优先级最高,直接age=function()

  4. 执行函数t1


经过3步之后,age直接变成优先级最高的函数,接下来age变成27,然后因为没有执行function age(),因此age不变。






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1926582,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
JavaScript 前端开发
JavaScript操作DOM元素
JavaScript操作DOM元素
12 1
|
1月前
|
JavaScript 前端开发
如何使用 JavaScript 操作 DOM?
如何使用 JavaScript 操作 DOM?
13 0
|
18天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
1月前
|
JavaScript 前端开发 算法
js开发:请解释什么是虚拟DOM(virtual DOM),以及它在React中的应用。
虚拟DOM是React等前端框架的关键技术,它以轻量级JavaScript对象树形式抽象表示实际DOM。当状态改变,React不直接操作DOM,而是先构建新虚拟DOM树。通过高效diff算法比较新旧树,找到最小变更集,仅更新必要部分,提高DOM操作效率,降低性能损耗。虚拟DOM的抽象特性还支持跨平台应用,如React Native。总之,虚拟DOM优化了状态变化时的DOM更新,提升性能和用户体验。
24 0
|
23天前
|
JavaScript
事件触发、事件捕获与事件冒泡(js的问题)
事件触发、事件捕获与事件冒泡(js的问题)
12 0
|
3天前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
19 2
|
4天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
11天前
|
存储 JavaScript 前端开发
JavaScript DOM 操作:解释一下 cookie、sessionStorage 和 localStorage 的区别。
Cookie是服务器发送至客户端的文本信息,会随每个请求发送回服务器,适合控制会话状态但可能暴露隐私。SessionStorage仅在当前会话中存储数据,关闭浏览器后清除,适合临时存储如登录状态。LocalStorage则持久保存数据,即使关闭浏览器也不会清除,适用于存储长期设置。三种方式各有侧重,应按需求选择。
15 0
|
11天前
|
JavaScript 前端开发 安全
JavaScript DOM 操作:解释一下浏览器的同源策略。
**同源策略**是浏览器安全基石,它阻止脚本跨不同协议、域名或端口访问资源,防止恶意行为。例如,HTTP页面无法直接用JS获取HTTPS页面内容。**CORS**允许跨域请求,但需服务器配合设置,通过`document.domain`属性可配置,但仍受限于服务器配置。
14 4
|
23天前
|
JavaScript
理解DOM树的加载过程(js的问题)
理解DOM树的加载过程(js的问题)
10 0