关于js高阶函数的疑问

小德德 2013-01-21 11:29:55
有高手可以讲解一下下面一段代码吗?
function compose(f,g)
{
return function(){
return f.call(this , g.apply(this,arguments));
}
}
var sum = function(x,y){return x+y}
var square = function(x){return x*x}
var squareofsum = compose(square , sum);
squareofsum(2,3);

为什么squareofsum(2,3);传入两个数字参数就可以得出那个结果的呢?(25)
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-01-21
  • 打赏
  • 举报
回复
先执行 var sum = function(x,y){return x+y} 2+3=5 再执行 var square = function(x){return x*x} 5*5=25 是25啊,有神马问题吗?
fzfei2 2013-01-21
  • 打赏
  • 举报
回复
(2+3)*(2+3)=25 return f.call(this , g.apply(this,arguments));==>square( sum(x,y) )
KK3K2005 2013-01-21
  • 打赏
  • 举报
回复
js里高阶函数 就是 闭包 或者 说是惰性函数 至于讲解 没什么好讲解的 call apply this arguments都是基础的东西 代码层次也很清晰 把他们还原成 执行时候的代码 就明白了
oxfed 2013-01-21
  • 打赏
  • 举报
回复
引用 楼主 Ted526200 的回复:
var squareofsum = compose(square , sum); squareofsum(2,3); 为什么squareofsum(2,3);传入两个数字参数就可以得出那个结果的呢?(25)
compose返回一个函数的引用,f()就是调用函数。 squareofsum(2,3) = compose(square , sum)(2,3)=function(){ return f.call(this , g.apply(this,arguments)); }(2,3)=25

87,991

社区成员

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

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