JS知识点:闭包

什么是闭包

两种理解:
理解一:闭包是嵌套的内部函数
理解二:包含被引用变量的对象

产生闭包的条件

一、函数被嵌套在一个函数里
二、内部函数引用了外部函数的数据(变量/函数)

关键点

执行函数定义就会产生闭包(不需要调用内部函数)
外部函数被调用几次就会产生几个闭包

常见的闭包

1、将函数作为另一个函数的返回值
2、将函数作为实参传递给另一个函数调用

闭包的作用

1、使用函数内部的变量在函数执行完后,仍然存活在内存中(演唱了局部变量的生命周期)
2、在外部作用域中可以操作到函数内部的数据(变量/函数)

闭包的生命周期

产生:在嵌套在内部函数定义执行完时产生(不是在调用的时候产生)
死亡:在嵌套的内部函数称为垃圾对象时

闭包的缺点

函数执行完后,函数内的局部变量没有释放,占用内存时间变长,容易造成内存泄漏

<script>
function func () {
 	var a = 0
 	return function i () {
 	 	a ++
 	 	console.log(a)
 	}
}
var fun = func()
fun()//1
fun()//2
</script>

闭包面试题

<script>
function fun(n,o){
     console.log(o);
     return {
         fun:function(m){
             return fun(m,n)
          }
     }
}
var a = fun(0)//?
var b = fun(0).fun(1).fun(2)//?
var c = fun(0).fun(1)//?
c.fun(2)//?
c.fun(3)//?
</script>

答案

var a = fun(0)//undefined
var b = fun(0).fun(1).fun(2)//undefined 0 1
var c = fun(0).fun(1)//undefined 0
c.fun(2)//1
c.fun(3)//1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值