作用域
是指变量能被使用的范围。只有在作用域内,变量才可以被访问(也称为可见)。空间维度。
生命周期
是指变量能在内存中存在多久。时间维度。
闭包
只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成定义在一个函数内部的函数。
有权访问另一个函数作用域内变量的函数都是闭包。
闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!另外使用闭包也要注意变量的值是否符合你的要求,因为他就像一个静态私有变量一样。
总结一下,创建一个闭包必须满足以下几点:
必须有一个内嵌函数
内嵌函数必须引用外部函数中的变量
外部函数的返回值必须是内嵌函数
装饰器
装饰器就是一种的闭包的应用,只不过其传递的是函数。