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获取下拉框选定项的值和文本的实现代码
Feb 26 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
slideToggle+slideup实现手机端折叠菜单效果
May 25 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
详解vue axios二次封装
Jul 22 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
小程序数据通信方法大全(推荐)
Apr 15 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
Mar 04 Javascript
基于Vue+Webpack拆分路由文件实现管理
Nov 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
php Session无效分析资料整理
2016/11/29 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
浅谈javascript中的作用域
2012/04/07 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
写一个Vue loading 插件
2020/11/09 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
探究python中open函数的使用
2016/03/01 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
内部类的定义、种类以及优点
2013/10/16 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
中国文明网签名寄语
2014/01/18 职场文书
亲子活动总结
2014/04/26 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
转让协议书范本
2014/09/13 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python