这个谁帮我解释一下

qq_24553423 2016-01-27 11:00:50
function fo(){
var i=0;
return function(n){
//return n+i++;//原题是这样的。n和i先相加,然后i再累加
//return n+++i;//扩展一下思咱:如果改造成这样的代码会是什么答案。(n先和i相加,然后n自己再累加)
return n+(++i);//这样呢?(i先累加,然后n和i再相加)
//首先要明确这个i是那儿定义的,当这个方法运行的时候。
}
};

var f=fo();
var a = f(15); alert(a)//16
var b = fo()(15);alert(b)//16
var c = fo()(20);alert(c)//21
var d = f(20);alert(d);//22

上面,b,c我能明白i是重置了的,为啥a,d的没有重置为0,var f=fo() 难道有啥变化
...全文
156 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨小事er 2016-01-27
  • 打赏
  • 举报
回复
function fo(){ var i=0; return function(n){ return n+(++i); } }; var f=fo(); var a = f(15); alert(a)//16 var b = fo()(15);alert(b)//16 var c = fo()(20);alert(c)//21 var d = f(20);alert(d);//22 var e = f(20);alert(e);//23
杨小事er 2016-01-27
  • 打赏
  • 举报
回复
因为你调用的是f,在f里,i的值不会重置,a的时候i自加到了1,d的时候,i就自加到了2,因为你保存在了f里,所以i的值也得到了保存,如果有e,i的值还会接着变大。
  • 打赏
  • 举报
回复
建议楼主找js权威指南来看闭包部分,里面有详细说明,a,d闭包i指向同一个i

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧