JavaScript匿名函数及其它一些小问题

qq_35510443 2017-05-25 06:31:04

function box(){
var num = 0;
return function(){
return num++;
}
}
alert(box()());//0
alert(box()());//0
alert(box()());//0
var a = box();
alert(a());//0
alert(a());//1
alert(a());//2
为什么box()()输出的num不能累加,box()()调用的不是box()中的匿名函数吗?a()输出的num值能够累加,谢谢啊,不太理解。
还有一点,
function box(){
var num = 0;
return function(){
return num++;
}
}
alert(box()())输出的是0
而function box(){
var num = 0;
return function(){
num++;
return num;
}
}
alert(box()())输出的是1
因为编程基础太差了,许多理解不了,谢谢各位大神解答。
...全文
160 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojunjor 2017-05-26
  • 打赏
  • 举报
回复
别急,先找个基础的视频慢慢看看,不然越学越蒙
  • 打赏
  • 举报
回复
1. 第一个问题可以这样理解吧: 如果你尝试alert(box())会发现打印的是return后面的值。如果把return后面的值删掉。 即function box(){ var num=0; num++ ; alert(num)} 发现结果都是1.所以问题出在return后面的返回函数上。 按你第一个调用的方法box()(),每一次都会完整执行一次函数。所以num=0;而第二个调用相当于每次只重复调用return后函数。 所以num值会++ 2. 好好去看看num++,++num的定义就明白了。
似梦飞花 2017-05-25
  • 打赏
  • 举报
回复
1.每次调用box都定义num=0 所以每次是0啊 2.只掉用一次box 所以没num一直是那个num 所以累加 3 num++ ++num的区别 自己查下吧

87,993

社区成员

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

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