高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...
高程三 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...的更多相关文章
- 预备JS执行环境,预执行脚本
page.evaluateOnNewDocument(pageFunction, ...args) pageFunction <function|string> Function to b ...
- JavaScript 执行环境(执行上下文) 变量对象 作用域链 上下文 块级作用域 私有变量和特权方法
总结自<高程三>第四章 理解Javascript_12_执行模型浅析 JS的执行环境与作用域 javascript高级程序第三版学习笔记[执行环境.作用域] 在javascript ...
- javascript中执行环境和作用域(js高程)
执行环境(execution context,为简单起见,有时也成为“环境”)是javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境 ...
- JS高程4.变量,作用域和内存问题(2)执行环境及作用域
1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...
- JS_高程4.变量,作用域和内存问题(2)执行环境及作用域
1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...
- 【原】javascript执行环境及作用域
最近在重读<javascript高级程序设计3>,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦.今天要总结的是js执行环境和作用域. 首先来说一下执行环境 一.执行环境 书上概念 ...
- JavaScript之一: 闭包、执行环境、作用域链
这是大虾的第一篇博文,大虾试图用最直白的语言去描述出所理解的东西,大虾是菜鸟,水平有限,有误的地方希望路过的朋友们务必指正,谢谢大家了. 从读书时代一路走来,大虾在学习的时候逐渐喜欢上了去追寻根源,这 ...
- javascript 作用域链及闭包,AO,VO,执行环境
下面的文章内容会根据理解程度不断修正. js变量作用域: 定义:变量在它申明的函数体以及函数体内嵌套的任意函数体内有定义. function AA(){ var bb='我是AA内部变量'; func ...
- VO、AO、执行环境和作用域链
1.变量对象(variable object) 原文:Every execution context has associated with it a variable object. Variabl ...
- (O)JS:执行环境、变量对象、活动对象和作用域链(原创)
var a=1; function b(x){ var c=2; console.log(x); } b(3); ·执行环境(execution context),也称为环境.执行上下文.上下文环境. ...
随机推荐
- [LeetCode] Find the Celebrity 寻找名人
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- sql server 公共表达式的简单应用(cte)
一.前言 现在做项目数据访问基本都会选择一种orm框架,它以面向对象的形式屏蔽底层的数据访问形式,让开发人员更集中在业务处理上,而不是和数据库的交互上,帮助我们提高开发效率:例如一些简单的insert ...
- MongoDB的备份和恢复
1.导出数据库/备份: @echo off F: cd F:\software1\mongdb\mongodb-win32-x86_64-\bin start mongodump.exe -h -d ...
- HTTPf服务器(3)
功能完整的HTTP服务器 导语 这个一个功能完备的HTTP服务器.它可以提供一个完整的文档输,包括图像,applet,HTML文件,文本文件.它与SingleFileHttpServer非常相似,只不 ...
- JVM_七种垃圾收集器介绍
本文中的垃圾收集器研究背景为:HotSpot+JDK7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老代的算法. JVM会从年轻代和年 ...
- maven-过滤不打入包的文件
在使用maven打包时,有时有些测试文件,或者配置都希望打入到架包中 此时就需要使用将不用的文件过滤,maven有很方便的过滤插件.因工作时间,暂不讨论.本次讨论一个非常简单除暴的方法,通过配置ecl ...
- Android基础总结(八)
服务两种启动方式(掌握) startService 开始服务,会使进程变成为服务进程 启动服务的activity和服务不再有一毛钱关系 bindService 绑定服务不会使进程变成服务进程 绑定服务 ...
- iOS中获取当前时间,设定时间,并算出差值
NSDate *date = [NSDate date];//获取当前时间 NSTimeZone *zone = [NSTimeZone systemTimeZone];//修改时区 NSIntege ...
- Map工具系列-07-TFS变更集提取工具
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- UVA1225
每增加1个整数,所有位上的对应数都加一.建立一个10000列10行的表,然后查表就可以了. #include<stdio.h> #include<string.h> ][]; ...