函数内部的变量,在函数外部是无法获取并且修改的。
function f() {
var n = 1
n = n + 1 // 我们打算让每执行一次,n+1
return n
}
f() // 2
f() // 2
f() // 2
// 每次执行函数,变量都被重新设置,并没有实现我们要的效果
闭包就是在函数的内部,在构建一个子函数,去影响函数的值,从而达到修改函数内部变量的效果。
function f() {
var n = 0
return (function() {
console.log(n++) // 子函数,每次修改父函数的 n + 1,并且通过父函数返回到外部
})
}
add = f()
add() // 0
add() // 1
add() // 2