19. 对闭包的理解、工程中闭包使用场景
闭包是在一个函数作用于内 访问函数内的私有变量
es6之前的模仿块级作用域、递归调用问题
返回值 vue 的 data
函数赋值
函数参数
IIFE ( 自执行函数)
循环赋值 (解决 for 中let 作用 )
getter 、 setter
function fn(){ var name='hello' setName=function(n){ name = n; } getName=function(){ return name; } //将setName,getName作为对象的属性返回 return { setName:setName, getName:getName } } var fn1 = fn();//返回对象,属性setName和getName是两个函数 console.log(fn1.getName());//getter fn1.setName('world');//setter修改闭包里面的name console.log(fn1.getName());//getter
- 迭代器(执行一次函数 往下取一次值)
- 缓存
执行上下文
全局执行上下文
: 代码开始执行时首先进入的环境。函数执行上下文
:函数调用时,会开始执行函数中的代码。eval执行上下文
:不建议使用,可忽略。
执行上下文的周期,分为两个阶段
创建阶段
创建词法环境、生成变量对象(建立作用域链)、 确认this 指向
执行期上下文
- 创建AO对象
- 找形参和变量声明, 将变量和形参作为AO属性名,值为undefined
- 实参和形参统一
- 在函数体找到函数声明, 值赋予函数体。
执行阶段
变量赋值、函数引用及执行代码