闭包: 有权访问另一个函数作用域中的变量的函数
function price() { // 函数total使用了函数price的变量count
var count = 1
return function total() {
return count++
}
}
let result = price() // 我们在函数外部引用,就形成闭包
console.log(result()) // count-3
console.log(result()) // count-4
// count变量不会被销毁,保留着计算值
应用 封装私有变量
function price() {
var count = 1
return {
total(){
return count
}
add(){
count++
}
}
}
let result = price()
result.total() // count-1
result.add()
result.total() // count-2
//外部代码根本无法访问count
优点:缓存一个变量,减少全局变量使用 缺点:占用内存,内存泄漏;可外部调用,访问到内部变量修改