对js闭包的一点理解

我对于闭包的浅显理解

// demo1
function foo(){
	var a = 1
	function bar(){
		console.log(a)
	}
	return bar
}
var baz = foo()
baz() // 1

在这个例子中,我们希望foo()执行完毕之后就销毁掉,但是由于我们将bar的引用return出去了,它就拥有了对foo()内部作用域的闭包,让该作用域一直存活,以供bar()在之后任何时间进行引用。
所以bar()依然持有对该作用域的引用,这个引用就叫做闭包。

无论使用什么方式对函数类型的值进行传递,当函数在别处被调用时都可以观察到闭包的产生

// demo2
function foo(){
	var a = 1
	function inside(){
		console.log(a)
	}
	out(inside)
}
function out(fn){
	fn() // 形成闭包
}
foo()

把内部函数inside传递给out,当调用这个内部函数的时候,它涵盖的foo()内部作用域的闭包就可以观察到,因为它能够访问到变量a

间接传递函数也是可以触发闭包

// demo3
var fn
function foo(){
	var a = 1
	function inside(){
		console.log(a)
	}
	fn = inside // 将inside分配给全局变量
}
function outside(){
	fn() // 形成闭包
}
foo()
outside()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值