JS中的闭包

3 篇文章 0 订阅

什么是闭包

闭包是指有权访问另一个函数作用域中变量的函数,即一个作用域可以访问另外一个函数内部的局部变量

function say() {
	var num = 2
	function sayNum() {
		console.log(num)
	}
	sayNum()
}
say()

什么时候需要闭包

当需要重复使用一个对象,但邮箱保护这个对象不被其他代码污染时就可以使用

闭包的作用

  1. 使得一个外部函数有权访问一个内部函数作用域
  2. 保护变量不被内存回收机制回收
  3. 避免全局变量被污染,方便调用上下文的局部变量,加强封装性
  4. 读取函数内部的变量
  5. 这些的值始终保持在内存中,不会在外层函数调用后被自动清除

闭包的优缺点

优点:

变量长期驻扎在内存中,避免全局变量的污染

缺点:

闭包长期占用内存,内存消耗很大,比起普通函数闭包对内存的占用更对,可能导致内存泄露,因此建议在使用完毕后,可以手动赋空值进行回收: fn = null

闭包的形成必备条件

  1. 需要访问作用域
  2. 函数嵌套(物理条件)
  3. 被嵌套函数在另一个外部作用域中被调用

闭包的缺点

比起普通函数闭包对内存的占用更对,因此建议在使用完毕后,可以手动赋空值进行回收: fn = null

闭包例子

// 累加器
		function counter() {
			// 秒数
			let second = 0

			function doCounter() {
				// 到达10秒后停止
				if(second === 10) {
					clearInterval(recordSecond)
					console.log('计时结束!')
					return
				}
				second += 1
				console.log(`${second}秒`);
			}
			return doCounter
		}

		// 得到累加器
		const doCounterFn = counter()
		console.log(doCounterFn);

		const recordSecond = setInterval(function() {
			// 调用累加器
			doCounterFn();
		}, 1000)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值