闭包是作用域不会被回收

什么是闭包?
当内部的函数被保存在了外部时,由于内部函数的作用域链上存在着内部函数创建时的作用域环境(父函数和祖先函数的AO对象,以及全局的GO对象),导致内部函数可以顺着作用域链寻找所以形成了闭包,同时内部函数的作用域链无法被垃圾回收机制回收,导致内存泄露。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>

</body>
<script type="text/javascript">


	//go{
	//	cc:888,
		//dd:function aa(), 
		//aa:function aa(),
	//}

	// scope  aa go
	function aa(){
		// ao{
		// 	a:10
		// 	bb:function
		// }		

		// scope bb aa go
		function bb(){

		// ao{
		// bb:666
		// }

			var bb=666;
			console.log(a) // undefined undefined
		}

		bb();
		var a=10;
		return bb;


	}

	var cc=888;
	var dd=aa(); //右边是个表达式先执行完表达式在赋值给bb
	dd();

//每一个函数都会记住 自己定义时的作用域环境(父级作用域一直到全局作用域)
//函数执行是,函数内部创建自己的作用域,添加到自己出生时作用域环境的顶部
// 正常来说一个函数执行完毕以后,自己的作用域会被垃圾回收机制销毁
//如果定义时的作用域环境被销毁,那么函数记住的所有作用域都会被销毁
//但是如果这个函数被挪到别的作用域中去定义了,那么函数将一直记住自己出生时的作用域环境。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值