高程三 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. 有理数的稠密性(The rational points are dense on the number axis.)

    每一个实数都能用有理数去逼近到任意精确的程度,这就是有理数的稠密性.The rational points are dense on the number axis.

  2. channel Golang

    Golang, 以17个简短代码片段,切底弄懂 channel 基础 (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的 ...

  3. GO语言总结(2)——基本类型

    上篇博文总结了Go语言的基础知识——GO语言总结(1)——基本知识  ,本篇博文介绍Go语言的基本类型. 一.整型 go语言有13种整形,其中有2种只是名字不同,实质是一样的,所以,实质上go语言有1 ...

  4. [LeetCode] Max Points on a Line 共线点个数

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  5. 浏览器内核控制Meta标签说明文档【转】

    背景介绍 由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的几款浏览器为例,我们优先通过Webkit内核渲 ...

  6. 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较

    二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』   二分法的存储要求:要求顺序存储,以便于根据下标随机访问   二分法的时间效率:O(Log(n))   二分 ...

  7. 如何使用PullToRefresh

    这里有详解 PullToRefresh使用详解(一)--构建下拉刷新的listView PullToRefresh使用详解(二)---重写BaseAdapter实现复杂XML下拉刷新 PullToRe ...

  8. 常用jQuery 方法

    //强制给数字补全小数点 function toDecimal2(x) { var f = parseFloat(x); if(isNaN(f)) { return false; } var f = ...

  9. Android性能优化

    Android最佳性能实践 Android最佳性能实践(一)——合理管理内存 Android最佳性能实践(二)——分析内存的使用情况 Android最佳性能实践(三)——高性能编码优化 Android ...

  10. WPF学习系列 简单的窗体设置

    今天要学习的源码是一个窗体设置.效果如下,可拖拽.这让我想起了vs的启动界面 下面是源码的情况 项目结构: 窗体代码: cs代码 1.新建项目 略 2.设置窗体 AllowsTransparency= ...