博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...
阅读量:5087 次
发布时间:2019-06-13

本文共 1844 字,大约阅读时间需要 6 分钟。

高程三 4.2、4.3

一、执行环境

1、全局执行环境是最外层的执行环境。

2、每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前的执行环境。

二、作用域

1、每个执行环境,都对应一个自己的作用域。

2、每个执行环境,都能访问上一级的父级、父父级、...作用域,称为 “作用域链”

3、执行代码时,会按照标识符沿着作用域链一级一级向上查找。如果找不到,则会报错

  *标志符:执行时,使用到的变量或函数

三、上下文执行过程

进入执行环境后 代码执行前,编译器进行三个步骤:

1、查找并提升 “函数所有行参” 的声明(如果有行参的话)

2、查找并提升 “执行环境内部所有函数” 的声明

3、查找并提升 “执行环境内部所有变量” 的声明

上个例子:

function show(a, b) {    //三步骤:        /*        // 1: 查找并提升 “函数所有行参” 的声明        a = function() { console.log('aa'); };        b = undefined;     */        /*        // 2: 查找并提升 “执行环境内部所有函数” 的声明        // 此时 a的指向替换掉1中 a指向的函数        a = function() { console.log('a222'); }    */    /*        // 3: 查找并提升 “执行环境内部所有变量” 的声明        // 由于变量 优先级没有 函数高,所以此时a变量提升后无法替换上面的 a作为函数的指向        b = undefined;    */        alert(a); // function a() { console.log('a222'); }    function a() { console.log('a222'); }    var a = 123;    var b = 222;    alert(a);  // 123    alert(b);  // 222}show(function() { console.log('aa'); });

注意:上面例子,第3步 由于变量声明提升的优先级,没有 函数声明提升的优先级高,所以 即使是发现了同名变量a,也无法替换到之前定义的a函数

可以参考:http://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html

四、垃圾收集

Javascript具有自动垃圾收集机制

1、原理:找出那些不需要再继续使用的变量,然后释放其占用的内存。

为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间)周期性地执行这一操作。

2、一般引擎采用两个策略:标记清除、引用计数

注意:虽然,js有自动垃圾收集机制,但是 为了性能优化,可以做到一点:

  a: 对象或函数或事件使用完后,重置为null,意味着切断变量与它此前引用的值之间的连接,下次垃圾收集器运行时,会删除这些值,并回收它们占用的内存。

五、try...catch(ex)...

try : 捕获异常语句

catch : 异常后续处理语句

function show() {    var msg = '参数至少为一个';    try {        if (arguments.length == 0) {            throw new Error(msg);            // 异常后面的语句 终止执行            console.log('error...');         }      console.log('go on...');  //如果执行if里面的异常,则无法执行到这一句    } catch (ex) {        console.log(ex);        throw new Error(msg);    }}

注意:

1、if内部抛出的异常只会影响,if内部后面的执行。而不会影响if外面的语句执行。

2、try...catch...常用在插件中。

 

转载于:https://www.cnblogs.com/souyidai/p/js_4.html

你可能感兴趣的文章
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
Mysql性能调优
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
list 容器 排序函数.xml
查看>>