javascript-闭包

闭包简介:

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。


闭包的特性:

1.函数内再嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收



闭包有什么作用:

如下例:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。




又例如:给li添加点击事件,能正确输出li的索引

	<section>
		<ul>
			<li>111</li>
			<li>222</li>
			<li>333</li>
		</ul>
		
	</section>
	<script type="text/javascript">
	    var nodes = document.getElementsByTagName("li");
	    for(let i = 0;i<nodes.length;i+= 1){
	    	(function(i){//现在包装了一层之后,i 被传递到内层的匿名函数 local 作用域中去,所以3次循环都会建立独立的 i 
	    		nodes[i].onclick = function(){
	            	console.log(i+1);
	        	};
	    	})(i);
	    	
	       /* nodes[i].onclick = function(i){//这个也不行,能正确输出,但是事件不能点击
	            console.log(i+1);
	        }(i);*/
	       
	       /*nodes[i].onclick = function(){//不用闭包的话,值每次都是4
	       	   console.log(i+1);
	       };*/
	      
	    }
	</script>


闭包的缺点:

闭包可以在函数外部改变函数中的变量的值,如果你把函数作为对象、闭包作为方法、局部变量作为私有属性使用,则会改变该变量的值;

闭包还会把函数中的变量的值存储于内存中,对内存消耗很大,所以滥用闭包的结果就是影响网页性能,IE中则可能导致内存泄露;




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值