今天看到了一段关于闭包的代码:代码片段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上下文与作用域
添加回答
举报
0/150
提交
取消
