javascript基础进阶_深入剖析执行环境及作用域链


Posted in Javascript onSeptember 05, 2017

执行环境

执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象。

变量对象

环境中定义的所有变量和函数都保存在这个对象中。

全局执行环境

全局执行环境是最外围的一个执行环境。在web浏览器中,全局执行环境被认为是Window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。

每个函数都有自己的执行环境。

作用域链

当代码在一个环境中执行,会创建变量对象的一个作用域链。

用途:保证对执行环境有权访问的所有变量和函数有序访问。

特点:作用域链的前端始终是当前执行的代码所在的环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象。活动对象最开始只包含arguments对象。作用域的下一个变量对象来自包含环境,而再下个来自下一个包含环境。

var color ="blue";
function changeColor() {
 
 var anotherColor ="red";
 
 function swapColors() {
  var tempColor = anotherColor;
  anotherColor = color;
  color = tempColor;
 }

 swapColors();
}

changeColor();

如图表示执行环境,内部环境可以通过作用域链访问外部环境,但是外部环境不能访问内部环境中的变量和函数。每个环境都可以向上搜索作用域链,以查询变量和函数;但是不能向下搜索。

javascript基础进阶_深入剖析执行环境及作用域链

没有块级作用域 声明变量

使用var声明的变量会自动添加到最接近的环境中。如果省略var关键字,即会添加到全局环境中。

function add(num1,num2) {

 var sum = num1+num2;

 return sum;

}

var result= add(10,10)

console.log(sum)

javascript基础进阶_深入剖析执行环境及作用域链

sum is not defined

function add(num1,num2) {

 sum = num1+num2;

 return sum;

}

var result= add(10,10)

console.log(sum)

javascript基础进阶_深入剖析执行环境及作用域链

查询标识符

搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符,找到即终止搜索。即如果局部环境中存在着同名标识符,就不会使用位于父环境中的标志符。

var color ="red";

function getColor() {



 return color;

}



console.log(getColor())

javascript基础进阶_深入剖析执行环境及作用域链

var color ="red";

function getColor() {

 var color="green";

 return color;

}



console.log(getColor())

javascript基础进阶_深入剖析执行环境及作用域链

参考:《javascript高级程序设计(第三版)》

以上这篇javascript基础进阶_深入剖析执行环境及作用域链就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE/FireFox具备兼容性的拖动代码
Aug 13 Javascript
jquery uaMatch源代码
Feb 14 Javascript
jquery验证表单中的单选与多选实例
Aug 18 Javascript
网页运行时提示对象不支持abigimage属性或方法
Aug 10 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
详解Javascript中的原型OOP
Oct 12 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
Dec 28 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
vue实现商城购物车功能
Nov 27 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
基于ES6 Array.of的用法(实例讲解)
Sep 05 #Javascript
对于Javascript 执行上下文的全面了解
Sep 05 #Javascript
JS一个简单的注册页面实例
Sep 05 #Javascript
基于react组件之间的参数传递(详解)
Sep 05 #Javascript
zTree获取当前节点的下一级子节点数实例
Sep 05 #Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 #Javascript
JS沙箱模式实例分析
Sep 04 #Javascript
You might like
Zend引擎的发展 [15]
2006/10/09 PHP
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
JavaScript使用cookie
2007/02/02 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
js 方法实现返回多个数据的代码
2009/04/30 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
linux下安装easy_install的方法
2013/02/10 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
Python创建临时文件和文件夹
2020/08/05 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
Java模拟试题
2014/11/10 面试题
司仪主持词两篇
2014/03/22 职场文书
新年爱情寄语
2014/04/08 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技