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

js闭包的一个小问题.......

js闭包的一个小问题.......

侃侃尔雅 2018-09-05 09:30:52
function foo(x) {  var tmp = 3;  return function (y) {     alert(x + y + (++tmp));   } }var bar = foo(2);  bar(10);为什么上面这段代码每次调用bar时它都会自加1.但是下面这段代码每次执行又永远不会变化,恒为16function foo(x) {  var tmp = 3;  function bar(y) {     alert(x + y + (++tmp));   }   bar(10); } foo(2)
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

第二个例子里面并没有闭包,因为你没有返回一个函数,所以每次调用foo(x)都会重新定义新的tmp,但是第一个因为有闭包的存在,tmp在foo()执行之后仍然是存在的,因为tmp这个变量是可以被返回的bar()访问的,这个tmp并没有在foo()执行后就销毁,所以每次累加都会导致tmp变大。


查看完整回答
反对 回复 2018-10-17
  • 1 回答
  • 0 关注
  • 619 浏览
慕课专栏
更多

添加回答

举报

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