js学习笔记(闭包)

闭包

定义

function csdn() {
	let n = 1;
	return function sum() {
		console.log(++n);
	}
}
函数可以访问到其他函数作用域中的数据

产生闭包的条件

· 函数嵌套
· 内部函数引用了外部函数的数据(变量/函数)
· 外部函数被调用

闭包的作用

· 使用函数内部的变量在函数执行完后,任然存活在内存中
· 让函数外部可以操作到函数内部的数据(变量/函数)

闭包的声明周期

产生:嵌套的内部函数在定义时就产生了
死亡:在嵌套的内部函数成为垃圾对象时

闭包的应用

let btns = document.querySelectorAll('button');
btns.forEach(item=>{
	let bind = false; //设置节流阀
	item.addEventListener("click",function(){
		if(!bind) { 
			bind = true; //当重复点击按钮是,一下代码不再执行 
			let left = 1;
			setInterval(function(){
				item.style.left = left++ + "px"; //闭包的产生
			},100)
		}
	})
})
function order( field, type = "asc" ) {
	return function( a,b ) {
		if(type = "asc") return a[field] > b[field] ? 1 : -1; //闭包的产生
		return a[field] > b[field] ? -1 : 1;
	}
}
let csdn = lesson.sort(order("price", "asc"));

闭包的缺点

· 函数执行完后,函数内的局部变量没有释放,占用内存时间会变长
· 造成内存泄漏(及时释放,赋值null)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值