谈谈我对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 高效运行代码分析
Mar 18 Javascript
jquery中val()方法是从最后一个选项往前读取的
Sep 06 Javascript
html+js+highcharts绘制圆饼图表的简单实例
Aug 04 Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
微信小程序icon组件使用详解
Jan 31 Javascript
js实现购物车功能
Jun 12 Javascript
解决vue动态为数据添加新属性遇到的问题
Sep 18 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 Javascript
详解Vue 换肤方案验证
Aug 28 Javascript
vue实现修改图片后实时更新
Nov 14 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
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
PHP脚本数据库功能详解(中)
2006/10/09 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
django Serializer序列化使用方法详解
2018/10/16 Python
简单的Python调度器Schedule详解
2019/08/30 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
python自定义函数def的应用详解
2020/06/03 Python
python3让print输出不换行的方法
2020/08/24 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
师范应届生教师求职信
2013/11/05 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers