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();
扩展一下:

添加回答
举报
0/150
提交
取消
