学习JS笔记(第七章-闭包,作用域)

闭包的概念##

学习JS笔记(第七章-闭包,作用域)_第1张图片
Paste_Image.png

闭包实例##

数据传递更加灵活###

学习JS笔记(第七章-闭包,作用域)_第2张图片
Paste_Image.png

常见错误之循环闭包###

学习JS笔记(第七章-闭包,作用域)_第3张图片
Paste_Image.png

封装变量###

学习JS笔记(第七章-闭包,作用域)_第4张图片
Paste_Image.png

闭包小结##

学习JS笔记(第七章-闭包,作用域)_第5张图片
Paste_Image.png

作用域##

js有三种作用域:全局,函数,eval,js 没有块级作用域

学习JS笔记(第七章-闭包,作用域)_第6张图片
Paste_Image.png

作用域链###

new function()构造的函数访问不到当前函数内的变量

学习JS笔记(第七章-闭包,作用域)_第7张图片
Paste_Image.png

利用函数中作用域封装###

javascript可以用+()放在function前,为函数表达式写法,防止function前置形成函数声明,函数声明后加()会报语法错误

学习JS笔记(第七章-闭包,作用域)_第8张图片
Paste_Image.png

ES3执行上下文##

执行上下文,EC,栈结构,每一个函数都有自己的执行上下文EC(执行环境 execution context),并且每个执行上下文中都有它自己的变量对象VO(Variable object),用于存储执行上下文中的变量 、函数声明 、函数参数,这解释了js如何找到我们定义的函数和变量。

学习JS笔记(第七章-闭包,作用域)_第9张图片
Paste_Image.png

变量对象VO###

变量对象(Variable Object,简称VO),是一个抽象概念中的“对象”。
它用于存储执行上下文中的变量、函数声明、函数参数。
函数中还有一个概念——激活对象(AO),自带参数arguments

学习JS笔记(第七章-闭包,作用域)_第10张图片
Paste_Image.png

执行上下文与变量对象###

学习JS笔记(第七章-闭包,作用域)_第11张图片
Paste_Image.png

全局执行上下文(浏览器)###

学习JS笔记(第七章-闭包,作用域)_第12张图片
Paste_Image.png

函数中的激活对象AO###

对于函数而言,AO和VO是一个对象,函数AO分为两个阶段

  1. 变量初始化阶段
  2. 代码执行阶段

函数变量初始化


学习JS笔记(第七章-闭包,作用域)_第13张图片
函数

全局作用域下的初始化


学习JS笔记(第七章-闭包,作用域)_第14张图片
Paste_Image.png
学习JS笔记(第七章-闭包,作用域)_第15张图片

Vo(变量对象)-函数上下文对象,将按照如下顺序进行填充初始化:
1.首先函数参数(若未传入,初始化该参数值为undefined)
2.然后函数声明(若发生命名冲突,会直接覆盖)
3.最后变量声明(初始化变量值为undefined,若发生命名冲突,会忽略。)

实例:

学习JS笔记(第七章-闭包,作用域)_第16张图片
Paste_Image.png
Paste_Image.png

函数表达式不会影响VO,在vo中没有,所以不能前置函数表达式,_e是命名函数表达式的名字

学习JS笔记(第七章-闭包,作用域)_第17张图片
Paste_Image.png

代码执行阶段

学习JS笔记(第七章-闭包,作用域)_第18张图片
代码

实战###

学习JS笔记(第七章-闭包,作用域)_第19张图片
Paste_Image.png

总结##

学习JS笔记(第七章-闭包,作用域)_第20张图片
不同情况下的this的值
学习JS笔记(第七章-闭包,作用域)_第21张图片
构造器中的this

函数属性

函数是对象,所以它也有属性

学习JS笔记(第七章-闭包,作用域)_第22张图片

你可能感兴趣的:(学习JS笔记(第七章-闭包,作用域))