JavaScript中闭包概念以及应用分析

在《你所不知道的javaScript》中闭包的定义:
闭包是指有权访问另一个函数作用域中变量的函数。

我理解的:
预先定义一个环境,使得表达式中的每一个自由变量都得到了一个绑定值,开放表达式变成了一个闭合表达式,构建了一个闭包。
进一步:
闭包=函数+使得函数中每一个自由变量都获得绑定值的一个环境

函数是包含自由变量的函数,环境是使所有自由变量都获得绑定值的环境。

所以得出闭包就是:函数和对其周围状态(词法环境)的引用捆绑在一起构成闭包。

function fout(){
const a=1;
function fin(){
Console.log(a);
}
return fin;
})()()
//1.

这里fin函数可以访问外部fout函数的变量,这里就构成一个闭包,所以最后输出为1。被访问的函数fout()就是一个闭包函数。

 function fout(){
				let a=1;
				function fin(){
					console.log(a++)
				}
				return fin;
			}
			const fa = fout();
			const fb = fout();
			fa();
			fb();
			fa();
			fb();
		//输出1 1 2 2

这里也是和上面一样的道理。这里fout()也是一个闭包函数。

总结:
1.函数和对其周围状态(词法环境)的引用捆绑在一起构成闭包。
2.也就是说,闭包可以让你从内部函数访问外部函数作用域。
3.在JavaScript中,每当函数被创建,就会在函数生成时生成闭包。

闭包的主要作用延伸了变量的作用范围

闭包的缺点:会浪费内存,造成内存泄漏。

闭包的案例
点击获取li的索引
(1)动态添加属性方式

<body>
		<div>
			<ul class="nav">
				<li>苹果</li>
				<li>香蕉</li>
				<li>芒果</li>
			</ul>
		</div>
	 <!-- 动态添加属性方式	 -->
		<script>
			var lis = document.querySelector(".nav").querySelectorAll('li');
			for(var i=0;i<lis.length;i++){
				lis[i].index = i;
				lis[i].onclick = function(){
					console.log(this.index);
				}
			}
		</script>
	</body>

(2)闭包方式

<body>
		<div>
			<ul class="nav">
				<li>苹果</li>
				<li>香蕉</li>
				<li>芒果</li>
			</ul>
		</div>
	 <!-- 闭包属性方式	 -->
		<script>
			var lis = document.querySelector(".nav").querySelectorAll('li');
			for(var i=0;i<lis.length;i++){
				// 利用for循环创建立即执行函数
				(function(i){
					lis[i].onclick = function(){
						console.log(i);
					}
				})(i)
			}			
		</script>
	</body>

以上就是闭包的一个概念和应用。
终于尝试写博客了,踏出了第一步!!
希望翻身啊!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值