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

到底该怎么去理解闭包?

到底该怎么去理解闭包?

www说 2019-04-13 08:37:13
今天看到了一段关于闭包的代码:代码片段A:!function(){varnum=1;varexp={};functionadd(num){returnnum++;}exp.getAddNum=function(){returnadd(num);}window.a=exp;}()console.log(a.getAddNum());//1console.log(a.getAddNum());//1代码片段B:!function(){varnum=1;varexp={};functionadd(){returnnum++;}exp.getAddNum=function(){returnadd();}window.a=exp;}()console.log(a.getAddNum());//1console.log(a.getAddNum());//2谁能解释下这2段代码的区别吗?考验大家基本功的时候到啦~~~~
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

第一个里面是你传递进去的,他会使用当前作用域接收到的这个形参的值,它并没有去改变外层num的值,因此你每次用它来传递,值都是1。
而第二个的'add'方法中并没有num变量,他会通过作用域链找到外层的num,那么你这样调用时每次都是操作的外层变量的值,而这个值在你return之后是会累加的。
关于上下文和作用域链你可以看看这篇文章图解Javascript上下文与作用域
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号