猿问

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

function foo(x) {  var tmp = 3;  return function (y) {
    alert(x + y + (++tmp));
  }
}var bar = foo(2); 
bar(10);

为什么上面这段代码每次调用bar时它都会自加1.但是下面这段代码每次执行又永远不会变化,恒为16

function foo(x) {  var tmp = 3;  function bar(y) {
    alert(x + y + (++tmp));
  }
  bar(10);
}
foo(2)


侃侃尔雅
浏览 623回答 1
1回答

繁星淼淼

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

相关分类

JavaScript
我要回答