Javascript执行环境、作用域链
执行环境
可以把执行环境想象为一个圆圈,里面包含了一些变量、函数。
执行环境定义了变量或函数的有权访问的其他数据,决定了它们各自的行为。还有一个顶部执行环境。在浏览器中,顶部执行环境既为window,它在关闭浏览器过后会销毁此执行环境。
变量对象
可以把变量对象想象为圆圈的管家,它管理着当前执行环境里所有的变量和函数。
每一个执行环境都有一个变量对象,执行环境中所有的变量和函数都保存在这个变量对象中,但是这个变量对象我们无法通过代码进行访问。
环境栈
可以把环境栈想象成用于装置当前需要载入的执行环境的容器。
通过环境栈来控制执行环境的顺序,每进入一个新的执行环境,之前的执行环境将被挂载,而新的执行环境将被推入环境栈。当这个新的执行环境执行完之后,环境栈将当前已执行完的执行环境弹出并将控制权交回给之前被挂载的执行环境。以此继续执行,直到到达顶部执行环境。
作用域链
可以把作用域链想象成链接各个执行环境的一根线。
作用域链的作用保证了执行环境有权访问的变量、函数有序的访问,作用域链连接着当前执行环境以及当前执行环境之前被挂载的执行环境,一直以此方式直到顶部执行环境。
活动对象
如果执行环境是函数,那么执行环境的变量对象即为活动对象(argument对象),函数所有的参数均是argument对象的属性。
标识符解析
当在执行环境中使用某一个变量的时候,通过标识符来表示此变量,在使用标识符的时候,后台进行了一系列的查询,这个查询是依据作用域链来进行查询,首先查询作用域链当前的执行环境的变量对象是否包含此变量,如果没有则进行根据作用域链向上继续查询,直到顶部作用域链。在之间任何一个执行环境的变量对象中查询到则停止查询。如果没有查找出来则抛出错误。
Javascript执行环境、作用域链的更多相关文章
- javascript 执行环境,变量对象,作用域链
前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体. 通过上网查资料,特来总结,以备回顾和修正. 要讲的依次为: EC( ...
- JavaScript 执行环境以及作用域链
执行环境(execution context,为简单起见,有时也称为"环境")是 JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们 ...
- JavaScript 执行环境、作用域、内存管理及垃圾回收机制
前言 JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存. [原理]找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔( ...
- 图解JavaScript执行环境结构
JavaScript引擎在开始编译代码的时候,会对JavaScript代码进行一次预编译,生成一个执行环境,比如如下代码: window.onload=function(){ function sub ...
- javascript的关键所在---作用域链
javascript的关键所在---作用域链 javascript里的作用域是理解javascript语言的关键所在,正确使用作用域原理才能写出高效的javascript代码,很多javascript ...
- javascript执行环境(执行期上下文)详解
javascript执行环境(执行期上下文) 当js控制器(control)进入可执行代码时,控制器会进入一个执行环境,活动的多个执行环境构成执行环境栈,最上面的是正在运行的执行环境,当控制器进入一个 ...
- JavaScript 执行环境(执行上下文) 变量对象 作用域链 上下文 块级作用域 私有变量和特权方法
总结自<高程三>第四章 理解Javascript_12_执行模型浅析 JS的执行环境与作用域 javascript高级程序第三版学习笔记[执行环境.作用域] 在javascript ...
- JavaScript——执行环境、变量对象、作用域链
前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体.通过上网查资料,特来总结,以备回顾和修正. 目录: EC(执行环境或 ...
- javascript 执行环境,作用域、作用域链、闭包
1.执行环境 执行环境是JavaScript中国最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数 ...
- JavaScript执行环境和作用域(链)的那些事
执行环境 什么是执行环境 提起作用域,我们不得不说说什么是执行环境.执行环境定义了变量或函数有权访问的其他数据,并决定其各自的行为.每一个执行环境都有一个对应的变量对象,这个对象的作用就是保存在环境中 ...
随机推荐
- 教程-Delphi多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- Golang项目目录结构组织
其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序. 当然,首先要说的是环境变量$GOPATH,项目构建全靠它.这么说吧,想要构建一个项目,就要将这个 ...
- linux定时器用法
linux定时器 原文出自http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.html 今天看书看到了关于alarm的一些用法 ...
- Oracle数据库启动流程
1.oracle也可以通过命令的方式启动, (1)oracle启动流程-windows下 1) lsnrctl start (启动监听) 2)oradim -startup -sid 数据库实例名 2 ...
- OutLook中发送用户密码加密的小技巧
1 在左上栏目里面选择 New E-mail选项卡,点击进入发送新邮件页面. 2 在第一栏选择Options选项,点击打开 3 看到有一个红色按钮Perssion按钮,打开 4 ...
- 从BAE到SAE,从SAE又回到BAE
版权声明:本文为博主原创文章,未经博主允许不得转载. [很久以后] 这段话是很久之后补充的,发现错误要勇于改正,以下红色字体是对以前观点的改正, 大概总结下: 1.bae最大缺点是需要备案,不过现在看 ...
- careercup-树与图 4.2
4.2 给定有向图,设计一个算法,找出两个结点之间是否存在一条路径. 解答 根据题意,给定一个有向图和起点终点,判断从起点开始,是否存在一条路径可以到达终点. 考查的就是图的遍历,从起点开始遍历该图, ...
- c# 可以有多个Main()函数
可以有多个Main()函数,这样写:namespace ConsoleApp1{class Program{static void Main(string[] args){Console.WriteL ...
- 开启、关闭数据库mysql
1.命令行 net start mysql net start mysql 2.点控制面板→管理→服务 招到mysql 3.找到安装目录下的bin目录
- Android自定义View之ProgressBar出场记
关于自定义View,我们前面已经有三篇文章在介绍了,如果筒子们还没阅读,建议先看一下,分别是android自定义View之钟表诞生记.android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检 ...