闭包是什么

闭包是什么

1、函数中返回了一个函数

 function fn () {
        let a1 = 1
        return function () {
            return a1
        }
    }

闭包存在的意义

1、延长变量的声明周期
2、创建私有环境

let a ='123'
function fn1(){
	// 此处是一个私有环境即函数作用域
	let b = '456'
	console.log(a)
}
console.log(b)// 此处执行会报错
fn1()

作用域链

let name = '1'
function fn () {
	let name = '2'
	function fn1 () {
		let name = '3'
		console.log(name) // 输出 '3' 作用域查找规则 就近原则
	}
	fn1()
}
fn()

闭包会常驻内存

慎用闭包 防止内存泄漏

let handleCounter = function () {
        let num = 0;
        function changeNum (val) {
            num += val
        }
        return {
            add: function () {
                changeNum(1)
            },
            reduce: function () {
                changeNum(-1)
            },
            value: function() {
                return num
            }
        }
    }
    let count1 = handleCounter()
    let count2 = handleCounter()

    count1.add()
    count1.add()
    count2.add()
    console.log(count1.value()); // 输出 2
    console.log(count2.value()); // 输出 1

	以上说明 虽然 const1和const2 通过同一个闭包创建的 但是他们都有独自的词法作用域
	vue中data是一个函数,生成独自的作用域避免变量互相干扰也是通过这个实现的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值