javascript闭包理解

本文深入解析JavaScript中的闭包概念,探讨其工作原理及如何利用闭包特性实现变量的持久保存。通过实例展示闭包如何让内部函数访问外部作用域变量,并保持这些变量在外部函数执行完毕后仍然存活。

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

理解1:

在程序语言范畴内的“闭包”指的是函数把其中的变量作用域都“包”在该函数的作用域内,形成一个“包”,外部函数无法访问内部变量。所以严格意义上来说,JavaScript 中的函数都是闭包。但我们常说的闭包,通常是指为了让外部函数访问到内部函数中变量,使内部函数返回一个函数,在其中操作内部变量。

理解2:

  • 闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。
  • 闭包就是就是函数的“堆栈”在函数返回后并不释放,我们也可以理解为这些函数堆栈并不在栈上分配而是在堆上分配
  • 当在一个函数内定义另外一个函数就会产生闭包

做为局部变量都可以被函数内的代码访问,这个和静态语言是没有差别。闭包的差别在于局部变变量可以在函数执行结束后仍然被函数外的代码访问。这意味 着函数必须返回一个指向闭包的“引用”,或将这个”引用”赋值给某个外部变量,才能保证闭包中局部变量被外部代码访问。当然包含这个引用的实体应该是一个 对象,因为在Javascript中除了基本类型剩下的就都是对象了。可惜的是,ECMAScript并没有提供相关的成员和方法来访问闭包中的局部变 量。但是在ECMAScript中,函数对象中定义的内部函数() inner function是可以直接访问外部函数的局部变量,通过这种机制,我们就可以以如下的方式完成对闭包的访问了

例:

<span style="font-size:18px;">function greeting(name) {
     var text = 'Hello ' + name; // local variable
     // 每次调用时,产生闭包,并返回内部函数对象给调用者
     return function () { alert(text); }
}
var sayHello=greeting( "Closure" );
sayHello()  // 通过闭包访问到了局部变量text</span>
Hello Closure,因为sayHello()函数在greeting函数执行完毕后,仍然可以访问到了定义在其之内的局部变量text。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值