谈谈我对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 强制刷新页面的实现代码
Dec 13 Javascript
Jquery下attr和removeAttr的使用方法
Dec 28 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
javascript读写json示例
Apr 11 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
jQuery实现三级联动效果
Mar 02 Javascript
很棒的vue弹窗组件
May 24 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
Angular实现svg和png图片下载实现
May 05 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
Jun 26 Javascript
vue实现购物车加减
May 30 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
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
javascript里的条件判断
2007/02/27 Javascript
Jquery 设置标题的自动翻转
2009/10/03 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
13个PHP函数超实用
2015/10/21 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python编程之多态用法实例详解
2015/05/19 Python
python操作 hbase 数据的方法
2016/12/18 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
一套Delphi的笔试题二
2013/05/11 面试题
医生爱岗敬业演讲稿
2014/08/26 职场文书
法人委托书范本
2014/09/15 职场文书
检讨书1000字
2014/10/11 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
小学优秀班主任材料
2014/12/17 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
Django migrate报错的解决方案
2021/05/20 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
MySQL Server 层四个日志
2022/03/31 MySQL