谈谈我对JavaScript原型和闭包系列理解(随手笔记8)


Posted in Javascript onDecember 24, 2015

在上篇文章给大家介绍了《谈谈我对JavaScript原型和闭包系列理解(随手笔记6)》, 谈谈我对JavaScript原型和闭包系列理解(随手笔记9)     可以点击了解详情。

执行上下文栈

执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。

压栈出栈过程----执行上下文栈:

谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

var a = 10,    //1. 进入全局上下文环境
  fn,
  bar = function(x) {
   var b = 5;
   fn(x + b); //3. 进入fn函数上下文
  };
fn = function(y) {
 var c = 5;
 console.log(y + c);
};
bar(10);    //2. 进入bar函数上下文环境

1、在执行之前,首先创建全局上下文环境

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

2、代码执行,执行到bar(10)之前,全局上下文中的变量在执行过程中被赋值。

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

3、执行到bar(10)调用bar函数,同时创建该函数内部的执行上下文环境

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

4、这时候该执行上下文环境进行压栈,设置为活动状态

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

5、bar函数执行到fn(x + b),调用fn函数,创建了fn函数的执行上下文,并压栈,设置为活动状态

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

6、fn函数执行完毕,fn环境出栈,被销毁,释放内存,bar函数变为活动态

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

7、fn函数执行完毕并销毁,意味着bar也执行完毕了,此时bar函数环境出栈,并销毁。全局环境变为活动态。

 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)

到这里这一段代码的执行过程就完毕了。

根据原作者的描述:

其中上下文环境的变量赋值过程我省略了许多,因为那些并不难,一看就知道。

的确!代码的大概执行过程跑完后,就能很清楚的知道各个执行环境中的变量是个怎样的状态。

讲到这里,我不得不很遗憾的跟大家说:其实以上我们所演示的是一种比较理想的情况。有一种情况,而且是很常用的一种情况,无法做到这样干净利落的说销毁就销毁。这种情况就是伟大的——闭包。要说闭包,咱们还得先从自由变量和作用域说起。

以上内容是小编给大家分享我对JavaScript原型和闭包系列理解(随手笔记8),希望大家喜欢。

Javascript 相关文章推荐
javascript 节点排序 2
Jan 31 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
Aug 07 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 Javascript
jqPlot jQuery绘图插件的使用
Jun 18 Javascript
AngularJS基础 ng-init 指令简单示例
Aug 02 Javascript
AngularJS基础 ng-paste 指令简单示例
Aug 02 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 Javascript
jQuery实现的事件绑定功能基本示例
Oct 11 jQuery
js利用iframe实现选项卡效果
Aug 09 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
js中flexible.js实现淘宝弹性布局方案
Jun 23 #Javascript
正则表达式优化JSON字符串的技巧
Dec 24 #Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 #Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 #Javascript
JQuery实现的按钮倒计时效果
Dec 23 #Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 #Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 #Javascript
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
JS小框架 fly javascript framework
2009/11/26 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python与pycharm有何区别
2020/07/01 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
如何强制垃圾回收
2015/10/06 面试题
简短大学毕业感言
2014/01/18 职场文书
素食餐饮项目创业计划书
2014/02/02 职场文书
安全生产月演讲稿
2014/05/09 职场文书
学期个人自我总结
2015/02/13 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
各国货币符号大全
2022/02/17 杂记
分享7个 Python 实战项目练习
2022/03/03 Python
python套接字socket通信
2022/04/01 Python
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技