以下两种闭包有什么不同

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,闭包不应该是保存着对变量的引用,为什么第一种每次执行结果不变

慕莱坞森
浏览 407回答 1
1回答

千万里不及你

第一种函数中的闭包仅在函数内调用过,那么它的生命周期也会随着父级函数结束而被释放。第二中函数中的闭包被父函数当作返回值存储在外部变量中,那么此时的闭包函数的生命周期将等于存储其的那个外部变量的生命周期下面代码同理:var a = 1;var fo = function(){    alert(a++);};fo();fo();fo();扩展一下:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript