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 相关文章推荐
浅谈JavaScript中面向对象技术的模拟
Sep 25 Javascript
javascript读取xml
Nov 04 Javascript
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 Javascript
JQuery实现用户名无刷新验证的小例子
Mar 22 Javascript
基于javascript显示当前时间以及倒计时功能
Mar 18 Javascript
JavaScript表单焦点自动切换代码
Jul 24 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
Sep 29 Javascript
vue: WebStorm设置快速编译运行的方法
Oct 18 Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 Javascript
基于layui轮播图满屏是高度自适应的解决方法
Sep 16 Javascript
如何利用vue实现波谱拟合详解
Nov 05 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
php 如何获取数组第一个值
2013/08/06 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
写给小白看的JavaScript异步
2017/11/29 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
活动总结书
2014/05/08 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
员工评语范文
2014/12/31 职场文书
时尚女魔头观后感
2015/06/04 职场文书
关于JavaScript轮播图的实现
2021/11/20 Javascript
在python中读取和写入CSV文件详情
2022/06/28 Python