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

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

变量保留的机制

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

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

总结

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

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

请登录后发表评论

    暂无评论内容