个人JS体系整理(二)

  eval()函数计算JavaScript字符串,并把它作为脚本代码来执行。如果参数是一个表达式,eval()函数将执行表达式。如果参数是Javascript语句,eval()将执行Javascript语句。

个人JS体系整理(二)

1.1

  如上图所示,第一个eval内部为一个函数表达式,在执行该函数的同时,定义了两个全局变量XY,所以结果分别为200427

  由于因为它会执行任意传给它的代码,在代码字符串未知或者是来自一个不信任的源时,会导致安全问题,同时非常耗性能(它会执行两次2次,一次解析成js语句,一次执行),最重要的是,99.9%使用eval 的场景都有不使用eval的解决方案,所以在任何情况下我们都应该避免使用eval函数。

二. nullundefined 的区别

  (1) null表示一个对象是“没有值”的值,也就是值为“空”;undefined表示一个变量声明了没有初始化(即没有赋值)

  (2) undefined不是一个有效的JSON,而null是;undefined的类型(typeof)undefined,而null的类型(typeof)object

  (3) 在验证null时,一定要使用“===” ,因为“==”无法分别nullundefined!

个人JS体系整理(二)

图2.1

三. 事件与事件流

  (1) 事件

  事件是文档或者浏览器窗口中发生的,特定的交互瞬间,也可以理解为是用户或浏览器自身执行的某种动作,如click,changehover都是事件的名字,同时事件是javaScriptDOM之间交互的桥梁。

  (2) 事件流

  事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件,这个传播过程即DOM事件流。事件流有两种模型,即捕获型事件流和冒泡型事件流。

  冒泡型事件流:事件的传播是从最特定的事件目标到最不特定的事件目标。即从DOM树的叶子到根。

  捕获型事件流:事件的传播是从最不特定的事件目标到最特定的事件目标。即从DOM树的根到叶子。

个人JS体系整理(二)

3.1

  如上图所示,DOM标准采用捕获+冒泡,两种事件流都会触发DOM的所有对象,从document对象开始,也在document对象结束。DOM标准规定事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。

  (1) 事件捕获阶段:实际目标(<div>)在捕获阶段不会接收事件。也就是在捕获阶段,事件从document到<html>再到<body>就停止了。

  (2) 处于目标阶段:事件在<div>上发生并处理。但是事件处理会被看成是冒泡阶段的一部分。

  (3) 冒泡阶段:事件又传播回文档。

  来个例子搞一下,如下图:

个人JS体系整理(二)

3.2

  上图点击btn1的区域,会先弹出“btn1”,紧跟着弹出“content”,这就是一个最典型的冒泡事件。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjsyz.html