js中的闭包

1.闭包:1.闭包时嵌套的内部函数 2.包含被引用变量(函数)的对象 (闭包在嵌套的内部函数中,可使用chrome查看)
2.闭包的产生:当一个嵌套的内部(子函数)引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包。
3.闭包产生的条件:函数嵌套,内部函数引用了外部函数的数据(变量/函数)
闭包可以将函数作为另一个函数的返回值,可以将函数作为实参传递给另一个函数调用
产生闭包的个数,与外部函数创建有关,与内部函数1执行几次无关,看外部函数调用的次数
4.闭包的作用:使用函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期),让函数外部可以操作(读写)到内部的数据(变量/函数)
5.函数执行完后,函数内部声明的局部变量还存在吗?一般不存在,存在于闭包中的变量才存在
6.在函数外部能直接访问函数内部的局部变量吗?不能,但通过闭包可以让外部函数操作它
7.闭包的生命周期:
产生:在嵌套内部函数定义执行完时就产生了(不是调用,定义的时候就产生了)
死亡:在嵌套的内部函数成为垃圾对象

function fn1(){
//此时闭包就已经产生了(因为有函数提升,内部函数对象已经创建了)
	var a=2;
	function fn2(){//执行函数定义就会产生闭包()
	·a++;
		console.log(a);
}
fn2();
}
fn1();

function fn3(){
		var a=2;
		function fn4(){
			a++;
			console.log(a);
}
return fn4;
}
var f = fn3();
f();//3
f();//4,调用两次函数只产生了一个闭包
f = null;//闭包死亡,包含闭包的函数对象成为垃圾对象
//如果想要闭包产生两次,在还要再写下面的语句
fn3();

function showDelay(msg,time){
		setTimeout(function(){
				alert(msg);
	},time);
}
showDelay("hello",1000);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值