作用域初探

1、作用域定义:变量(变量作用域又称上下文)和函数生效(能被访问)的区域
2、全局变量、局部变量
3、作用域的访问顺序

挑战性作业: 要求输入一串低于10位的数字,输出这串数字的中文大写。
eg: input: 10000 output: 壹万
eg: input: 1001010 output: 壹佰万壹仟零壹拾

作用域精解

1、[[scope]]:每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一个。

[[scope]]指的就是我们所说的作用域,其中存储了执行期上下文的集合

2、作用域链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链。作用域链本质上是一个指向当前环境与上层环境的一系列变量对象的指针列表

3、执行期上下文:当函数执行时(前一刻),会创建一个称为执行期上下文的内部对象(AO)。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文被销毁。

AO放在作用域链的顶端

4、查找变量:从作用域的顶端依次向下查找。

例1:

function a(){function b(){var b = 234;}var a = 123;b();
}
var glob = 100;
a();

a 函数被定义时,发生如下过程:a.[[scope]] ----> 0 : GO { }
a 函数被执行时,发生如下过程:a.[[scope]] ----> 0 : AO { } 、1 :GO{ }
b 函数被创建时,发生如下过程:b.[[scope]] ----> 0 : AO { } 、1 :GO{ }
b 函数被执行时,发生如下过程:b.[[scope]] ----> 0 : AO { } 、1 :AO{ }
、 2 :AO{ }
例2:

function a(){function b(){var bbb = 234;console.log(aaa);}var aaa = 123;return b; //b被保存出来,demo()
}
var glob = 100;
var demo = a();
demo();

但凡是内部函数,被保存到外部,一定生成闭包

闭包

当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。
闭包小例子:

function a(){var num = 100;function b(){num ++;console.log(num);}return b;
}
//a 的AO被销毁
var demo = a(); //执行a,将函数b保存在demo中
demo(); //执行b,打印出101
//此时a的AO已经被销毁,第一次执行完b之后,将a的AO里面num值改为101,b的AO被销毁
demo(); //再执行b,打印出102

闭包的作用

1、实现公有变量
     eg : 函数累加器

function add(){var count = 0;function demo(){count ++;sonsole.log(count);}return demo();
}
var counter = add();
counter();
counter();
counter();
function test(){var num = 100;function a(){num ++;console.log(num);}function b(){num --;console.log(num);}return  [a,b];
}
var myArr = test();
myArr[0](); //打印101
myArr[1]{}; //打印100
//a和b共用一个test的AO

2、可以做缓存(存储结构)
     eg : eater

function eater(){var food = "";var obj = {eat : function (){console.log("i am eating" + food);food = "";}, //对象的方法push : function(myFood){food = myFood;}}return obj;
}
var eater1 = eater();
eater1.push('banana');
eater1.eat();

3、可以实现封装,属性私有化
     eg : Person();

4、模块化开发,防止污染全局变量

JS-作用域--渡一教育(视频笔记)相关推荐

  1. java渡一教育百度云_小白学java第1篇(视频课程为渡一教育)

    开始学习java了,准备将自己的的学习笔记整理出来,放在这,一方面是进行记录,另一方面也是想让自己坚持下去,如果有一起学习的伙伴可以一起学习打卡,相互监督!笔记内容是根据渡一教育的java课程整理的, ...

  2. 组件进阶+渡一教育第二节笔记

    组件进阶 mixins:混入 render:实现对虚拟DOM的操作 mixins基础代码: <!DOCTYPE html> <html><head><meta ...

  3. Auto.js视频笔记

    跳转总目录 前言 这篇笔记是我跟着视频教程自学时做的笔记 教程来源:b站-墨水心-Auto.js从入门到精通 视频地址:[Auto.js从入门到精通-哔哩哔哩] https://b23.tv/Me45 ...

  4. {渡一教育}成哥HTML课程干货笔记整--1

    这是我最近学习HTML课程整理出来的比较有用的干活资料,希望可以帮到大家学习 我学习的课程是腾讯课堂内[渡一教育]里成哥的HTML+CSS课程 是免费的公开课,可以学习全部的课程,内容也很有帮助,我将 ...

  5. {渡一教育}成哥HTML课程干货笔记整--8

    啊啊啊啊啊,好几天没认真学习了,笔记整理的都少了,每天看着渡一教育的学习群里都在学习或者答疑,真是有种罪恶感,要重新开始安排学习内容了,不能这么懒惰! 任意选择器:hover 是一种比较常见的写法 例 ...

  6. js作用域及作用域链概念理解及使用

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  7. Java零基础学习全套视频笔记

    Java零基础学习全套视频笔记 一.Java基础 1.注释 注释并不会被执行,是给我们写代码的人看的,防止项目结构代码太多忘记代码相关功能. 书写注释是一个非常好的习惯,平时写代码也一定要注意规范. ...

  8. 在线教育业务笔记03

    在线教育业务笔记03- 讲师banner(轮播图)管理模块 一.新建banner微服务 1.在service模块下创建子模块service-cms 2.使用代码生成器生成banner代码 2.1.sq ...

  9. SpringBoot整合微信支付开发在线教育视频网站(完整版)

    目录 ├─code.zip ├─第 1 章项目介绍和前期准备 │  ├─1-1 SpringBoot整合微信支付开发在线教育视频站点介绍.TS │  ├─1-2 中大型公司里面项目开发流程讲解.TS ...

  10. 渡一大师课笔记(重点:事件循环、浏览器渲染原理)

    渡一大师课笔记(重点:事件循环.浏览器渲染原理) 响应式原理(渡一) 什么是数据响应式? 函数与数据的关联(重要) 数据变化后,会自动重新运行依赖该数据的函数(重要) 被监控的函数 render.co ...

最新文章

  1. poj 1637(混合图求欧拉回路)
  2. PHP Liunx 服务安全防范方案
  3. hdu 3081(并查集+最大流)
  4. 明明两次返回的组件中的props不一致,为什么dom不重新渲染(react相关)
  5. VTK:Math之HomogeneousLeastSquares
  6. struts mysql 增删改查_struts2增删改查
  7. HDU 2095 find your present (2)
  8. 面试英语自我介绍的常用词汇
  9. 编译安装httpd-2.4.12
  10. js实现IE、谷歌浏览器打印网页内容
  11. 全网首发:制作LINUX安装软件包,要处理哪些系统目录和文件(3)
  12. Allwinner ClassA20类库分析
  13. gg修改器怎么能让服务器检测不到,gg修改器怎么绕过检测 | 手游网游页游攻略大全...
  14. HDFS加密存储(HDP、Ranger、Ranger KMS实现)
  15. 第一章 Python数据模型
  16. 计算机打字题目200字,拼音打字考试标准练习题200字
  17. java导入ldif文件
  18. win7电脑怎么伪装ip地址【系统天地】
  19. win10 opencv-4.1.0 环境配置
  20. css3自定义字体、字体图标

热门文章

  1. 90 后程序员:“创业一时爽,一直创业一直爽”
  2. 农村90后李传帅的创业故事
  3. 【C语言】这些经典题型大家都掌握了吗?一文学会这些题
  4. 联想台式电脑开机时不显示主板logo直接黑屏进入锁屏界面因此无法进入bios模式解决方法
  5. Few-shots object detection
  6. 啊哈添柴挑战Java1274. 输入3个数输出它们的和
  7. 分析 | NFTScan NFT API 在加密钱包开发中的应用
  8. FIFO的工作原理及其设计
  9. 深度学习7日入门-CV疫情特辑结营心得-alading
  10. 【Unity3D插件】Photon Unity Networking(PUN)插件分享《多人联机服务器》