javascript闭包

什么是闭包?
闭包(closure)
function a(){
	var i=0;
	function b(){
		alert(++i);
	}
	return b;
}
var c=a();
c();
闭包就是属性和函数的外调,外界想通过某种技术手段访问函数里面的变量或者方法,得到变量作用域的延续,延续当前变量的生命周期,变量和函数不会被GC回收。
闭包的作用就是在a执行完并返回后,闭包使得javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

javascript闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁。这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b就是说:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。

解释:

闭包就是属性和函数的外调,外界想通过某种技术手段访问函数里面的变量或者方法,得到变量作用域的延续,延续当前变量的生命周期,变量和函数不会被GC回收。
1、闭包和垃圾回收机制GC是相关联的;
2、闭包实际上是在涉及到一个对象的成员属性,何时被GC处理的问题;
3、怎样才能对对象的属性形成一个闭包

<html>
<head>
<title>js示例闭包closure演示</title>
<script language="javascript" type="text/javascript">
<!--
	function a(){
		this.i=0;
		function b(){
			alert(++i);
		}
		return b;
	}
	//闭包是和GC垃圾回收机制相关的。
	a();//此时a调用使用了函数中的i后,GC扫描i无任何函数指向时,就会回收释放空间。
	var c=a();//而a调用后将b赋给c了,GC扫描知道c得到的返回值b中包含了i,此时GC会判断i虽然没有使用,但仍有变量指向,GC暂时不能回收并释放空间,并将i先保留。
	c();
//-->
</script>
</head>
<body>
</body>
</html>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值