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 相关文章推荐
js多级树形弹出一个小窗口层(非常好用)实例代码
Mar 19 Javascript
通过遮罩层实现浮层DIV登录的js代码
Feb 07 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
Sep 02 Javascript
jQuery实现图片轮播特效代码分享
Sep 15 Javascript
详解JavaScript的流程控制语句
Nov 30 Javascript
AngularJS 使用 UI Router 实现表单向导
Jan 29 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
Jan 03 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
Mar 08 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
Sep 02 Javascript
简单了解小程序+node梳理登陆流程
Jun 24 Javascript
Layui点击图片弹框预览的实现方法
Sep 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句法规则详解 入门学习
2011/11/09 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
php模拟post提交数据的方法
2015/02/12 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
linux 下实现python多版本安装实践
2014/11/18 Python
通过Pandas读取大文件的实例
2018/06/07 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
Django实现跨域请求过程详解
2019/07/25 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
酒店总经理欢迎词
2014/01/08 职场文书
3的组成教学反思
2014/04/30 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
社区工作者演讲稿
2014/05/23 职场文书
会计岗位说明书
2014/07/29 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
人生感悟经典句子
2019/08/20 职场文书