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 相关文章推荐
使用TextRange获取输入框中光标的位置的代码
Mar 08 Javascript
JavaScript获取table中某一列的值的方法
May 06 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
May 16 Javascript
js实现select选择框效果及美化
Aug 19 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
详解如何在Angular优雅编写HTTP请求
Dec 05 Javascript
Vue批量图片显示时遇到的路径被解析问题
Mar 28 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
ES6对象操作实例详解
May 23 Javascript
js瀑布流布局的实现
Jun 28 Javascript
JS轻量级函数式编程实现XDM二
Jun 16 Javascript
基于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
php修改指定文件后缀的方法
2014/09/11 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
json 入门基础教程 推荐
2009/10/31 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
script标签属性用type还是language
2015/01/21 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
javascript基本算法汇总
2016/03/09 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
Python splitlines使用技巧
2008/09/06 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
git进行版本控制心得详谈
2017/12/10 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
Windows和Linux动态库应用异同
2016/07/28 面试题
优秀求职信范文分享
2014/01/26 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
金融管理专业求职信
2014/07/10 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
2014年底工作总结
2014/12/15 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
暑期家教宣传单
2015/07/14 职场文书
大学体育课感想
2015/08/10 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书