闭包定义
- 需要 直接 或者 间接的 返回一个函数
- 内部函数需要访问外部函数的局部变量
- 好处
- 延长变量的生命周期
- 在函数外可以使用函数内的变量
- 弊端
function outter () {
let a = 100
let obj = {
name:'outer函数',
age:18
}
function inner () {
return a
}
return inner
}
const newFn = outter()
let num = newFn()
console.log(num)
沙箱模式
- 利用了 函数内 "间接 "的返回了一个函数
- 外部函数 返回了 一个对象,这个对象内书写多个函数
function outer () {
let a = 0
let b = 999
const obj = {
getA: function () {
return a
},
setA: function (val) {
a = val
},
getB () {
return b
},
setB (val) {
b = val
}
}
return obj
}
const res = outer()
let winA = res.getA()
res.setA(winA + 1)
console.log(res.getA())
沙箱模式语法糖
- 语法糖: 在不影响功能的情况下,给我们提供了一些更简单的操作方式
- 其实就是利用 getter 和 setter 帮助我们简化了一些操作与代码
function outer () {
let a = 1
return {
getA() {
return a
},
setA(val) {
a = val
}
}
}
const res = outer()
res.setA(99)
console.log(res.getA())
function outer() {
let a = 1
return {
get a() {
return a
},
set a(val) {
a = val
}
}
}
const res = outer()
console.log(res.a)
res.a = 999
console.log(res.a)