javaScript函数闭包

一,函数闭包的定义

1.闭包的形式是在一个函数内部声明一个函数,内部的函数我们称之为闭包函数

function outFn(){
	function innerFn(){ //内部的函数就是闭包函数
	}
}

2.闭包函数的特点是引用了外部的函数的作用域

function outFn(){
	let i=0
	function innerFn(){ 
		return i //i=0;引用了outFn函数的作用域
	}
}

二, 闭包的作用

1.在es6之前没有块级作用域的概念,要想让函数拥有一个私有变量,变量需定于在全局上,且定于在全局上也算不上是私有变量。

//es6
{
	let a = 1 //在块作用域外a不能被访问到,可以算count的私有变量
	function count(){
		return a+=1
	}
}

count() //2
count() //3
//es5
var a = 1 //在全局定于,造成全局污染
function count(){
	return a+=1
}

2.通常我们使用闭包的操作是为了让闭包函数拥有一个私有作用域和私有变量,且不会被回收内存。(注意不是所有闭包函数都有上面的这些特点)

//会被垃圾机制回收
function outer()
{
	var i=0   
	var inner=function(){return i } //inner也是闭包函数,但是在outer调用结束后没有在外部被使用,所以直接会被回收
	return inner()
}
outer() //0 
//不会被垃圾机制回收
function outer()
{
	var i=0   //可以封装成一个私有变量
	var inner=function(){return i } // 函数inner访问了外部函数outer的变量i.
	return inner //返回函数本身,
}

var b = outer() // 返回闭包函数,闭包函数在外部被使用
var c = b() // 调用闭包函数
let b =bull;
function a(){
	let count=0
	b=function(){
		return count+=1
	}
}
a()
b() //此时b为闭包函数,引用了a函数的作用域,拥有了私有变量count

3.正常情况下,当一个函数调用结束后,函数内部定义的变量占用的内存会被清理掉,
(1)而当函数内部 存在闭包函数时,
(2)且在函数执行完,闭包函数在外部被使用的时候,
那么在外部函数调用结束之后,由于闭包函数引用了外部函数的作用域,所以外部函数的作用域会一直在内存中,不会被处理掉。

三,闭包的缺点

1.综上,过度的使用闭包函数,或者使用不当可能会造成内存泄漏。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值