JS中的闭包

JS中的闭包


闭包(closure)就是能够读取其他函数内部变量的函数。在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成 “ 定义在一个函数内部的函数”。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。(闭包的最典型的应用是实现回调函数(callback) )

1.全局环境

  • 全局环境不会被回收
  • 全局变量在函数内也是有效的
let title = 'xxx'

const test = () => {
            console.log(title)
        }

2.函数作用域

  • 函数调用之后会产生函数作用域
function test1() {
	let a1 = 1
    function test2() {
    	let a2 = 2
            }
    //在test1里面不能访问到a2
        }
  • 函数每次调用都会创建新的执行上下文
function test1() {
	let n = 1
	function test2() {
		console.log(++n)
        }
	test2()
    }
  • 如果要实现n的累加,必须使得数据被使用,这样内存空间不会被释放
function test1() {
	let n = 1
	return function() {
		console.log(++n)
            }
        }
 let a = test1()
 a()
 a()
 //可以实现累加

错误示例

function test1() {
	let n = 1
	return function() {
		let m = 1
		function test2(){
			console.log(++m)
			} 
		test2()
        }
   }
let b = test1()
b() //2
b() //2
//因为test2没有被外部引用

正确示例

function test1() {
	let n = 1
	return function() {
		let m = 1
		return function test2(){
			console.log(++m)
                } 
                     }
        }
let b = test1()()
b() //2
b() //3
  • 实际上上述例子中变量n也被保存了,因此可以说闭包延伸了函数的生命周期
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值