什么是闭包?
在JavaScript中,在函数中(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则产生闭包;或者说闭包的本质就是一个函数内部嵌套另外一个函数,在调用这个函数时,内部函数会临时创造一个空间,在外层函数执行完毕的时候,空间内的数据因为还存在着引用关系所以不会被回收机制回收,而内部函数创建的这个空间就是一个闭包,闭包简单来说就是一个封闭的,外部无法直接访问的一个空间,只要有函数就会有闭包
闭包的作用
保护私有变量不被修改
闭包解决的问题
闭包解决的问题就是函数内的数据不允许外界访问
我们可以通过返回内嵌的函数来解决这个问题
- set函数可以修改函数内部的值,不需要返回值
- get函数可以获取函数内部的值并且返回,且修改不了函数内部的值
演示代码:
function outer() {
let num = 100
// 添加函数
// 获取值
function get() {
return num
}
// 设置值
function set(value) {
num = value
}
// 返回两个函数:简洁写法
return { get, set }
}
// 外部想获取和赋值
let obj = outer()
console.log(obj)
console.log(obj.get()) // 100
obj.set(50)
console.log(obj.get()) // 50
代码结构: