以下两种闭包有什么不同

发布于 2022-09-05 06:09:13 字数 416 浏览 16 评论 0

function foo(x) { 
var tmp = 3; 
function bar(y) { 
alert(x + y + (++tmp)); 
} 
bar(10); 
} 
foo(2);
foo(2);

无论执行几次foo,alert都是16

function foo(x) { 
var tmp = 3; 
return function (y) { 
alert(x + y + (++tmp)); 
} 
} 
var bar = foo(2); // bar 现在是一个闭包 
bar(10);
bar(10);

每次调用bar都会在原基础加1,闭包不应该是保存着对变量的引用,为什么第一种每次执行结果不变

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红ご颜醉 2022-09-12 06:09:14

第一个每次执行foo都是创建新的闭包,里面的变量都是独立的;第二个只有一个闭包

初熏 2022-09-12 06:09:13

第一种函数中的闭包仅在函数内调用过,那么它的生命周期也会随着父级函数结束而被释放。

第二中函数中的闭包被父函数当作返回值存储在外部变量中,那么此时的闭包函数的生命周期将等于存储其的那个外部变量的生命周期

下面代码同理:

var a = 1;
var fo = function(){
    alert(a++);
};
fo();
fo();
fo();

扩展一下:

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文