谈谈我对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 相关文章推荐
js+ajax实现获取文件大小的方法
Dec 08 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
js运动事件函数详解
Oct 21 Javascript
canvas实现图像布局填充功能
Feb 06 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 Javascript
js实现图片轮播效果学习笔记
Jul 26 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
微信小程序实现随机验证码功能
Dec 20 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
Aug 20 Javascript
vue+echarts实现动态折线图的方法与注意
Sep 01 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
python爬虫基础知识点整理
2020/06/02 Python
Python如何输出整数
2020/06/07 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
好邻里事迹材料
2014/01/16 职场文书
好人好事事迹材料
2014/02/12 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
党小组意见范文
2015/06/08 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android