高程三 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); //
alert(b); //
}
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...常用在插件中。

高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...的更多相关文章

  1. 预备JS执行环境,预执行脚本

    page.evaluateOnNewDocument(pageFunction, ...args) pageFunction <function|string> Function to b ...

  2. JavaScript 执行环境(执行上下文) 变量对象 作用域链 上下文 块级作用域 私有变量和特权方法

    总结自<高程三>第四章  理解Javascript_12_执行模型浅析   JS的执行环境与作用域  javascript高级程序第三版学习笔记[执行环境.作用域] 在javascript ...

  3. javascript中执行环境和作用域(js高程)

    执行环境(execution context,为简单起见,有时也成为“环境”)是javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境 ...

  4. JS高程4.变量,作用域和内存问题(2)执行环境及作用域

    1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...

  5. JS_高程4.变量,作用域和内存问题(2)执行环境及作用域

    1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...

  6. 【原】javascript执行环境及作用域

    最近在重读<javascript高级程序设计3>,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦.今天要总结的是js执行环境和作用域. 首先来说一下执行环境 一.执行环境 书上概念 ...

  7. JavaScript之一: 闭包、执行环境、作用域链

    这是大虾的第一篇博文,大虾试图用最直白的语言去描述出所理解的东西,大虾是菜鸟,水平有限,有误的地方希望路过的朋友们务必指正,谢谢大家了. 从读书时代一路走来,大虾在学习的时候逐渐喜欢上了去追寻根源,这 ...

  8. javascript 作用域链及闭包,AO,VO,执行环境

    下面的文章内容会根据理解程度不断修正. js变量作用域: 定义:变量在它申明的函数体以及函数体内嵌套的任意函数体内有定义. function AA(){ var bb='我是AA内部变量'; func ...

  9. VO、AO、执行环境和作用域链

    1.变量对象(variable object) 原文:Every execution context has associated with it a variable object. Variabl ...

  10. (O)JS:执行环境、变量对象、活动对象和作用域链(原创)

    var a=1; function b(x){ var c=2; console.log(x); } b(3); ·执行环境(execution context),也称为环境.执行上下文.上下文环境. ...

随机推荐

  1. javascript中的自执行函数

    学习es6的时候遇到了自执行函数,感觉有必要写下来,一方面加深自己的记忆,另一方面还能分享给大家. 什么是自执行函数? 自执行函数就是为了不污染全局变量命名空间的一中匿名函数,相当于自己创建了一个作用 ...

  2. PAT 1047. 编程团体赛(20)

    编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队. 输入格式: 输入第一行给出一个正 ...

  3. Softreference | WeakReference

    转自:http://blog.csdn.net/kavendb/article/details/5935577 本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱 ...

  4. Canvas电子签名和游戏化

    今天一天的时间都在做包团报价的无流程原型设计,一方面参考了其他系统,一方面整理先在系统中不合理的部分,规范了报价元素的分类.梳理了意向需求,其实原来粗略的放了一个模板进去是听不靠谱的.客户的要求-&g ...

  5. .net的一致性哈希实现

    最近在项目的微服务架构推进过程中,一个新的服务需要动态伸缩的弹性部署,所有容器化示例组成一个大的工作集群,以分布式处理的方式来完成一项工作,在集群中所有节点的任务分配过程中,由于集群工作节点需要动态增 ...

  6. OAuth2.0相关知识

    自己总结的可能有误差. 大致分为6个步骤: 1.注册相关应用,获取client_id,client_secret.2.第三方请求用户授权.用户点击按钮同意授权后,授权服务器将生成一个用户凭证(code ...

  7. Jquery获取offsetHeight

    纯javascript: window.document.getElementById('MainColumn').offsetHeight jquery: $('#id').get(0).offse ...

  8. Jquery datatables 使用方法

    说明: 1.s开头的是字符串 2.b开头的是布尔值 3.i开头的是整型值 4.o开头的是Json对象 5.ao开头的是Json对象数组 6.aa开头的是二维数组 7.fn开头的是函数 服务器端返回的数 ...

  9. 数据结构作业——buzhidao(队列)

    buzhidao Description 有一个长度为 n 的序列,第 i 个数的大小为 a[i].现在从第 1 个数开始从左往右进行以下操作:1. 如果当前数是剩下的数中最大的,则输出并删去这个数. ...

  10. bzoj 2141: 排队

    2141: 排队 Time Limit: 4 Sec Memory Limit: 259 MB Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我, ...