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

JS闭包问题

JS闭包问题

开满天机 2018-12-12 13:13:43
function foo(x) {    var tmp = 3;    return function (y) {        alert(x + y + (++tmp));    }}var bar = foo(2); // bar 现在是一个闭包bar(10);上面的脚本最终也会alert 16,因为虽然bar不直接处于foo的内部作用域,但bar还是能访问x和tmp。  但是,由于tmp仍存在于bar闭包的内部,所以它还是会自加1,而且你每次调用bar时它都会自加1.不理解为什么会每次调用都加1,求大神解释
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这是一个作用域和内存释放的问题。

通常,当函数调用完成后,函数使用的内部变量会释放。但是,有些情况函数内部的变量并不会释放(很危险,可能会内存泄漏)。

回到这道题,当 var bar = foo(2) 时,因为返回值是一个函数,函数引用了 tmp 变量,所以 tmp 变量并不会被释放,一直保留在函数内,并且保留了自己的值。

所以每次调用时会执行 ++tmp 加一。


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信