闭包的概念##

Paste_Image.png
闭包实例##
数据传递更加灵活###

Paste_Image.png
常见错误之循环闭包###

Paste_Image.png
封装变量###

Paste_Image.png
闭包小结##

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

Paste_Image.png
作用域链###
用
new function()构造的函数访问不到当前函数内的变量

Paste_Image.png
利用函数中作用域封装###
javascript可以用!或+或()放在function前,为函数表达式写法,防止function前置形成函数声明,函数声明后加()会报语法错误

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

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

Paste_Image.png
执行上下文与变量对象###

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

Paste_Image.png
函数中的激活对象AO###
对于函数而言,AO和VO是一个对象,函数AO分为两个阶段
- 变量初始化阶段
- 代码执行阶段
函数变量初始化

函数
全局作用域下的初始化

Paste_Image.png

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

Paste_Image.png

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

Paste_Image.png
代码执行阶段

代码
实战###

Paste_Image.png
总结##

不同情况下的this的值

构造器中的this
函数属性
函数是对象,所以它也有属性
