js闭包

闭包

什么是闭包?
函数嵌套函数,被嵌套的函数就是闭包函数
闭包是指在函数外部访问函数作用域中变量(局部变量)的函数
作用:

  • 在一个函数的外部,可以使用函数内存的局部变量
  • 可以让读取的变量始终保存在内存中(增加块级作用域
  • 正常函数执行完毕之后,里面声明的变量被垃圾回收机制处理掉,但是闭包可以让作用域中的变量,在函数执行完毕之后依旧保持没有被垃圾回收机制处理掉(垃圾回收,当new一个对象的时候,相当于开辟一个空间,当这个空间不用的时候,垃圾回收机制会对这个空间进行清空,以便重新使用)
    在不使用let的情况下,我们想要每调用一次fun函数,使得count++count必须定义在函数体内),则我们就需要使用闭包函数
          function fun(){
				var count=0;
				 return function(){
					  console.log(count++);
				  }
			  }
			  var f=fun();//将局部变量的生命周期和全局变量f的生命周期进行绑定
			  f();
			  f();
			  f();

在这里插入图片描述
使用自运行的方式书写闭包函数

	 let f=(function(){
				 var count=0;
				 return function(){
					 return count++;
				 } 
			 })()
			 console.log(f())
			  console.log(f())
			   console.log(f())
			 

块级作用域
java,C,C++都有块作用域,即一对花括号里定义的变量,只在该花括号里起作用。
当我们需要给a增加一个块级作用域,让它在外部不被访问到,则需要使用闭包

         {
			  var a=10;
		  }
		  console.log(a);//10
         function fun(){  
			let f= function(){
				  var a=30; 
			  }
			  console.log(a);
		  }
		  fun()

在这里插入图片描述
闭包的方式实现 乘法运算

 function mult(m) {
			return function(n) {
				return function(k) {
					return m * n * k;
				}
			}

		}
console.log(mult(1)(2)(3));

使用闭包注意事项

  • 闭包会是得函数中变量都被保存在内存中,会导致内存消耗很大,因此不能滥用闭包,否则会导致网页的性能问题,在IE中可能会导致内存泄漏
  • 闭包会在父函数外部改变父函数内部变量的值,因此不要随意的改变父函数内部变量的值(如果你把父函数当作对象使用,把闭包当作它的公用方法,把内部变量当作它的私有属性, 注意不要随便改变父函数内部变量的值,如果闭包内部的变量被改变了,当我们调用方法时,就会导致内部数据改变)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值