JavaScript 闭包:函数执行完毕后,变量为何还能被访问?

javascript 闭包:函数执行完毕后,变量为何还能被访问?

闭包:变量生命周期的奥秘

众所周知,当 javascript 函数执行完毕后,它的变量就会被销毁。然而,闭包却打破了这一规律,它允许函数可以访问其他函数内部的变量,即使这些函数已经执行完毕。

案例解析

考虑以下代码:

立即学习“Java免费学习笔记(深入)”;

function fn() {  var num = 3;  return function() {      var n = 0;      n++;      num++;      console.log('n=' + n);      console.log('num=' + num);  }}var fn1 = fn();fn1(); // 1 4console.log("------");fn1(); // 1 5

在这个例子中,函数 fn 创建了一个局部变量 num。当 fn 执行完毕后,它的作用域链会被销毁,但由于闭包的特性,num 仍然可以被 fn1 访问。第二次调用 fn1 时,num 累加到了 5,但 n 始终为 0。

变量保留的机制

变量 num 能够保留下来,是因为它被闭包作用域保护着。闭包是一个新的作用域链,它将外部作用域链(fn 的作用域链)作为自己的父作用域链。因此,fn1 可以访问 fn 的变量,即使 fn 已经执行完毕。

反观变量 n,每次调用 fn1 都会创建一个新的局部作用域,n 在每次调用中都会被重新赋值为 0。

总结

闭包通过将变量保留在内存中,让函数可以访问其他函数内部的变量。这种特性在 javascript 中非常有用,它可以帮助我们创建动态且可复用的代码。

以上就是JavaScript 闭包:函数执行完毕后,变量为何还能被访问?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1494617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 16:43:06
下一篇 2025年12月19日 16:43:13

相关推荐

发表回复

登录后才能评论
关注微信