js闭包

本文详细阐述了JavaScript闭包的概念,通过实例展示了闭包在计数器应用中的作用,以及如何利用闭包解决循环中变量作用域的问题。同时,对比了使用闭包前后的效果,介绍了ES6 let关键字在闭包中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

闭包是指有权访问另一个函数作用域中的变量的函数。当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域 之外执行,这时 就产生了闭包。
创建闭包的过程

  1. 在A函数内部声明B函数;.
  2. A函数的返回值有B函数,这样就会创建涵盖整个包装函数内部作用域的闭包。即是但我们在其他地方调用A函数后,A函数返回B函数,我们通过它可以继续访问到A函数的作用域,而不会因垃圾回收机制使得A函数里的变量被回收。
 function fnc(){
   var n=123
 	function f(){
   	console.log(n);
  }
  return f;
  }
 var result=fnc();
 result(); 

上面的例子中函数fuc返回 f 函数,将它赋值给result时,当我们载外部调用result函数,它实际是调用到声明在fnc函数里的f函数,此时它也就可以找到变量n。

实例

计数器

function nums(){
	var start=0;
	function add(){
		return ++start
	}
	return add;
}
var numsInc=nums();
console.log(numsInc())//1
console.log(numsInc())//2

上面通过闭包来制作计数器,读取nums函数内部start变量,由于闭包的作用,该变量不会因为每次执行函数的结束而被回收。

如果没有使用闭包,每次都会输出1

function nums(){
	var start=0;
	++start;
	return start
}
var numsInc=nums();
console.log(numsInc())//1
console.log(numsInc())//1

循环与闭包

错误示范

function fnc(){
	var arr=[];
	for(var i=0;i<5;i++){
		arr[i]=function(){ //循环为数组赋值为函数
					return i;
		       }
	}
	 return arr//返回数组
}
var f=fnc();
console.log(f[0]())//5  
console.log(f[1]())//5

上面输出5的原因是但我们去调用f[0]函数时 这是i已经结束循环,它的值已经是最后一次循环的结果5

运用闭包

function fnc(){
	var arr=[];
	for(var i=0;i<5;i++){
		!(function(n){ //使用自执行函数
			arr[i]=function(){ 
					return n;
		       }
		})(i)
	}
	return arr//返回数组
}
var f=fnc();
console.log(f[0]())//0  
console.log(f[1]())//1

es6 let 块级作用域

function fnc(){
	var arr=[];
	for(let i=0;i<5;i++){
		arr[i]=function(){ //循环为数组赋值为函数
					return i;
		    	}
	}
	return arr//返回数组
}
var f=fnc();
console.log(f[0]())//0  
console.log(f[1]())//1
内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值