闭包
js必会到闭包的问题
通过闭包可以访问创建闭包时所处环境中的全部变量。闭包为函数提供所处环境的作用域的函数和变量。创建“安全气泡”。通过这种方式,即使创建函数时所处的作用域已经消失,但是函数仍然能够获得执行时所需要的全部内容。
- 通过构造函数内的变量以及构造方法来模拟对象的私有属性
- 处理回调函数 简化代码
引擎是通过执行上下文(调用栈)跟踪函数的执行。每次调用函数时,都会创建新的函数执行上下文,并推入调用栈顶端。当函数执行完成后,对应的执行上下文将从调用栈中推出。
引擎通过词法环境跟踪标识符(俗称作用域)
定义全局级别、函数级别甚至块级别的变量
- var 定义距离最近的函数级别变量或者全局变量
- let const 定义距离最近级别的变量 包括块级别变量
- 闭包是js作用域规则的副作用。当函数创建时所在的作用域消失之后,仍然能够调用函数