闭包(内层函数+外层函数变量)

举个例子

function outer(){
	let i = 1
	function fn(){
		console.log(i)
	}
	return fn
}
const fun = outer()
fun()

fun()这个函数可以读取到outer()中的变量

fun是全局的,根据js回收机制中标记清除法,从fun中可以找到i,所以i变量i不会被清除。

关于闭包实现数据私有

举个例子

function outer(){
	let i = 0
	function fn(){
		 i++
		console.log(i)
	}
	return fn
}
const fun = outer()
i=1000
fun()

i为局部变量,无法被外部修改,最后输出为1,不会为1001。