**闭包:**即重用变量,又保护变量不被篡改的一种编程方式。
**本质:**外层函数作用域对象因为被内层函数应用着无法释放,形成了闭包。
闭包的三个步骤:
- 外层函数包裹内层函数和要保护的变量
- 外层函数将内层函数返回到外部
- 使用者调用外层函数获得返回的内存函数对象,保存在一个变量中,今后可以反复使用。
**闭包的缺点:**内存泄漏
**闭包的释放:**把外层函数置为null
嵌套函数体内作用域链上至少有三个对象。
**闭包形成的原因:**外层函数调用后,外层函数的作用域对象被内存函数的作用域链连着无法释放,从而形成了闭包。
作用域:
- 用法方面:一个变量的可用范围
- 本质:保存变量的对象
为什么要有作用域?
为了防止不同范围的变量相互干扰
js一共有几级作用域?(2级)
1. 全局作用域
2. 函数作用域
let作用域是ES6后来出现的,let作用域范围:到当前代码块的底部。
**作用域链:**多层作用域对象串联形成的链式结构。
什么是原型对象?
集中存储同一类型的所有子对象共用成员的父对象,这个父对象就叫原型对象。
原型链
多级原型对象逐级形成的连式结构
原型对象怎么来的?
每次创建构造函数的时候都会自动赠送一个空的原型对象。
如何访问到原型对象?
构造函数.prototype=原型对象
子对象.proto=原型对象
原型对象.contructor=构造函数