注册 登录
编程论坛 JavaScript论坛

javascript函数问题

Innocence 发布于 2010-09-23 15:43, 587 次点击
以下代码中 add返回ret, ret 又返回add,这样不会无限循环吗?

闭包是怎么作用的呢?

下面的代码为什么输出5,15,35



function dwn(s) {

document.write(s+"<br/>");

}



function add(a, b)
{
  b = b || 0;
  var s = a + b;
  
  //返回一个供进一步累加的闭包
  var ret = function(a){
   return add(a, s);
  }
  ret.valueOf = ret.toString = function(){
   return s;
  }
  return ret;
}
dwn(add(5)); //5
dwn(add(5)(10)); //15
dwn(add(5)(10)(20)); //35
4 回复
#2
gupiao1752010-09-23 22:40
这个看似简单的问题,其实挺不好解释的,帮顶了!
#3
gupiao1752010-09-23 22:46
你把这3句删除:
ret.valueOf = ret.toString = function(){
   return s;
  }
  return ret;
然后其他结构里:
function add(a, b)
{
  b = b || 0;
  var s = a + b;
  
  //返回一个供进一步累加的闭包
  var ret = function(a){//其实这里根本就不执行了!
   return add(a, s);
  }
}
然后加上那3行:既然知道那var ret = function(a)不执行的,那么:
ret.valueOf = ret.toString = function(){
   return s;
  }
  return ret;

这个就等于直接返回S的结果,自然也就是,5,15,35!
#4
gameohyes2010-09-23 23:13
支持ls
闭包的价值在于可以作为函数对象 或者匿名函数
参考资料:http://baike.baidu.com/view/648413.htm
关于为什么输出5,15,35   自己去调试js吧,这样你会收获更多
#5
lucky5635912010-10-11 06:47
也遇到过类似问题
1