关于闭包的问题
来源: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里面。所以后面两个方法值不会共用
10
相似问题