关于闭包的问题

来源:11-3 商品修改功能实现

慕斯558859

2019-10-20

function fn() {
var i = 10;
return function (n){
console.log(n + (++i));
}
}
var f = fn();
f(10);//21
f(20);//32
fn()(10);//21
fn()(20);//31
请问老师:因为这个是闭包,所以变量i常驻内存,所以前两个I值公用?觉得理解的有问题,老师可以帮我分析下吗,谢谢,后面两个fn()(10)这种写法和前面的区别,万分感谢

写回答

1回答

河畔一角

2019-10-22

前两个函数i值共用。因为执行fn返回了一个函数,此时i已经在内存当中,并没有地方去从新初始化它,当再次执行fn(20)的时候,i已经变成了12,所以返回值是32。 但是如果运行fn()()这个等于每次都要运行两个函数,这样每次都会初始化i,因为i就在fn里面。所以后面两个方法值不会共用

1
0

Vue2.6+Node.js+MongoDB 全栈打造商城系统

课程全面升级,Vue2.6+Koa2,从前端入门全栈,让你的未来更宽广

2634 学习 · 924 问题

查看课程