首页 > 其他 > 详细

通过a++来理解闭包改变作用域的问题

时间:2015-10-09 22:43:52      阅读:213      评论:0      收藏:0      [点我收藏+]

纯属个人理解,如果有误请指出!

     让我们先看一段代码

1 function dog(){
2    var a=100;
3    a++;
4    return a;
5 }
6   alert(dog());//101
7   alert(dog());//101

     我们知道。我们不能通过局部变量来实现累加,那么来看下一段代码。

 1   function dog(){
 2    var a=100;
 3    return function(){
 4          a++;
 5          return a;
 6     }
 7 }
 8   var k=dog();
 9   alert(k());//101
10   alert(k());//102

    看第3行代码:我们把a++包装在闭包里。

    看第8行代码:我们又把闭包里的代码传递给k,相当于k=function(){a++; return a;}

    而k却恰恰是全局变量,所以此时function(){a++; return a;}在全局里,自然而然的a,就变成了全局变量,从而实现了累加。

    【总结】:function(){a++; return a;}里的a是局部变量,而function(){a++; return a;}却赋给了一个全局变量,导致

     function(){a++; return a;}始终留在内存中,而function(){a++; return a;}的存在依赖于dog(),因此dog()也始终留在内存中。

通过a++来理解闭包改变作用域的问题

原文:http://www.cnblogs.com/millent/p/4865200.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!