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

js面试问题

js面试问题

Cats萌萌 2018-09-23 17:04:55
  var i = 100;    function addI(){        var i = 0;        return function(){             i++;            console.log(i);         }     }     addI()();       // 1     addI()();       // 1     var c = addI();     c();            // 1     c();            // 2今天遇到了这个面试问题,求科普下。为啥addI()()都为1(这点可以理解),而c()()执行i会递增?
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

有点汗颜啊,竟然没有把握——我的理解:add()()只是单纯的执行一次add方法,当给c对象引用add方法时,c对象一直存在(活引用),add方法中的方法形成了一个闭包(此时c对象引用的add方法已经形成了一个闭包)。第一次调用的时候,add方法内的i对象赋值为0,在执行匿名函数是,内部i没有值,找到外部的i,并++。第二次调用时,add方法再次申明了一个i对象,但是此时的内部匿名函数内i还保留着上一次调用的值。所以直接在上一次调用的结果i++。不知道对不对的

查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 737 浏览

添加回答

举报

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