闭包的概念##
闭包实例##
数据传递更加灵活###
常见错误之循环闭包###
封装变量###
闭包小结##
作用域##
js有三种作用域:全局,函数,eval,js 没有块级作用域
作用域链###
用
new function()
构造的函数访问不到当前函数内的变量
利用函数中作用域封装###
javascript
可以用!
或+
或()
放在function
前,为函数表达式写法,防止function
前置形成函数声明,函数声明后加()
会报语法错误
ES3执行上下文##
执行上下文,EC,栈结构,每一个函数都有自己的执行上下文EC(执行环境 execution context),并且每个执行上下文中都有它自己的变量对象VO(Variable object),用于存储执行上下文中的变量 、函数声明 、函数参数,这解释了js如何找到我们定义的函数和变量。
变量对象VO###
变量对象(Variable Object,简称VO),是一个抽象概念中的“对象”。
它用于存储执行上下文中的变量、函数声明、函数参数。
函数中还有一个概念——激活对象(AO),自带参数arguments
执行上下文与变量对象###
全局执行上下文(浏览器)###
函数中的激活对象AO###
对于函数而言,AO和VO是一个对象,函数AO分为两个阶段
- 变量初始化阶段
- 代码执行阶段
函数变量初始化
全局作用域下的初始化
Vo(变量对象)-函数上下文对象,将按照如下顺序进行填充初始化:
1.首先函数参数(若未传入,初始化该参数值为undefined)
2.然后函数声明(若发生命名冲突,会直接覆盖)
3.最后变量声明(初始化变量值为undefined,若发生命名冲突,会忽略。)
实例:
函数表达式不会影响VO,在vo中没有,所以不能前置函数表达式,_e是命名函数表达式的名字
代码执行阶段
实战###
总结##
函数属性
函数是对象,所以它也有属性