为了账号安全,请及时绑定邮箱和手机立即绑定

以下两种闭包有什么不同

以下两种闭包有什么不同

慕莱坞森 2018-12-25 21:19:37
function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2);foo(2);无论执行几次foo,alert都是16function foo(x) { var tmp = 3; return function (y) { alert(x + y + (++tmp)); } } var bar = foo(2); // bar 现在是一个闭包 bar(10);bar(10);每次调用bar都会在原基础加1,闭包不应该是保存着对变量的引用,为什么第一种每次执行结果不变
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞



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


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


下面代码同理:


var a = 1;

var fo = function(){

    alert(a++);

};

fo();

fo();

fo();

扩展一下:

https://img1.sycdn.imooc.com//5c304bfd0001e6bc01780306.jpg

查看完整回答
反对 回复 2019-01-05
  • 1 回答
  • 0 关注
  • 406 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号