javascript中的闭包

欢迎访问我的博客https://qqqww.com/,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~

1 闭包是什么

当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父> 函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包

2 实例

根据作用域链的规则,底层作用域没有声明的变量,会向上一级查找,找到就返回,没找到就一直找,直到window的变量,没有就返回undefined,这里明显count 是函数内部的flag2 的那个count

	var count = 10   //全局作用域 标记为flag1
	function add () {
	    var count = 0    //函数全局作用域 标记为flag2
	    return function(){
	        count += 1   //函数的内部作用域
	        alert(count)
	    }
	}
	var s = add()
	s() //输出1
	s() //输出2

3 变量的作用域

变量的作用域分类:全局变量和局部变量

特点:

  1. 函数内部可以读取函数外部的全局变量;在函数外部无法读取函数内的局部变量
  2. 函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量

使用闭包的注意点:

  1. 滥用闭包,会造成内存泄漏:由于标识为flag2count被闭包所引用,所以在内存中不会被回收,造成内存泄漏
  2. 会改变父函数内部变量的值:所以,如果把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值