JavaScript 中的闭包:为什么变量在函数执行后仍然可用?

JavaScript 中的闭包:为什么变量在函数执行后仍然可用?

闭包JavaScript 中的神秘之处

在 javascript 中,闭包是一个让许多初学者困惑的概念。当变量在执行函数后仍然可用时,闭包就会形成。

让我们深入研究一个示例:

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 4 console.log("------"); fn1(); // 1 5
登录后复制

在这个示例中,你会注意到变量 num 在第一次执行 fn 函数后不会被销毁。这导致每次调用 fn1 时 num 会累积,而 n 会重新初始化。

发生这种情况是因为 fn1 是一个闭包,它可以访问父函数 fn 的内部变量 num。即使 fn 函数已经执行完毕,闭包的特性也会保留其变量,直到不再被引用。

因此,在 javascript 中,闭包允许函数访问其外部作用域的变量,即使该作用域已经结束了。这提供了强大的灵活性,但如果不仔细使用,也可能导致意想不到的行为,例如内存泄漏。

为了更好地理解闭包,可以参考阮一峰的深入文章:“学习javascript闭包(closure)”。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容