注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

融智技术学院

融智技术学院163分站,为广大好友提供更多的帮助

 
 
 

日志

 
 

【JavaScript每日一问】Javascript中怎么理解闭包?  

2014-03-20 13:25:50|  分类: JavaScript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Q

考虑下面的东西

  • fs=[];
    for(var i = 0; i < 3; i++){
      fs.push(
    function(){
       
    return i;
      });
    }
    console.log(fs[
    0](),fs[1](),fs[2]())

我想我能在函数中结束所以会输出“0 1 2”,但结果却是“3 3 3”。

为什么会这样?还有,有没有其他办法完成此工作?

 

A:

实际上,你传入了三个匿名函数实例通过fs数组使用。然后你的log声明调用了三次函数。在那时候你调用了它,在训话完成时i的值以3结束,所以就返回了3

我不确定你说的“工作”是什么,但是也许下面的代码可以达到你要的效果:

  • fs = [];
  • function closureFunc(myVal) {
     
    return function () {
       
    return myVal;
      }
    }
  • for (var i = 0; i < 3; i++) {
      fs.push(closureFunc(i));
    }
  • console.log(fs[0](), fs[1](), fs[2]());

这段代码创建了三个分离的闭包函数,这些函数有声明“闭包函数”的范围。通过那些闭包myVal设置经过的值。

 

【JavaScript每日一问】Javascript中怎么理解闭包? - 融智技术学院 - 融智技术学院

 

  评论这张
 
阅读(34)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017