JS笔记 | 闭包

闭包的由来

JS中变量是function级作用域,也就是说,在function中定义的变量可以再function内部(包括内部定义的嵌套function中)使用,而在function外部无法使用,但是,js中,函数就是一块保存了现有数据的内存,是要找到这块内存就可以进行调用。因此,如果想办法获取到内部的嵌套函数,就可以在外部使用使用嵌套函数来调用内部定义的局部变量

function f1(){
	var v=1
	function f2(){
		console.log(v)
	}
	return f2	//关键点
}
var f=f1()
f()		//1

函数f1中定义了变量v,正常情况下在f1外面是无法访问v的,但是f1中嵌套定义的函数f2是可以访问v的,而且在调用f1时会返回函数f2,这样就可以在f1外面访问f1的局部变量 v ,这就是闭包,当然,如果需要还可以在f2中直接返回v的值,就可以在f1外部获取v的值。

闭包的另一种种表现

let f;
  {
     let i={note:'safe'}
     f=function(){return i;}
   }
let oRef=f();
oRef.note="Danger"
console.log(oRef.note)
//输出Danger

高手文章:
Groovy语法之闭包:https://blog.youkuaiyun.com/tscyds/article/details/77450608
为什么js会有闭包:https://blog.youkuaiyun.com/weixin_36094484/article/details/81164240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值