zoukankan      html  css  js  c++  java
  • 从 Linq Aggregate 到 chrome 控制台的奇葩旅行

     和 Js 的 Reduce 类似,需要注意的是如果提供种子会多迭代一次。

     JS 的 Reduce 可以通过 初始化 数组来提供种子。

     累加器 概念应用广泛,可以通过定义累加器类型来实现 更多功能,这里一定要注意迭代次数。

    比如 实现 map

     比如 尾递归 ,累加器 (y)减少了计算次数。

    sum 计算 : 5+ sum(4)

           => 4+sum(3) 

                  => 3+sum(2)

                 => 2+sum(1)

                      => 1

    =>2+1=>3+3=>6+4=>10+5 =>15 

    sump 计算:sump(4,5) =>sump(3,9) =>sump(2,12) =>sump(1,14) =>sump(0,15) =>15

     sum 可以计算到 11429 ,sump 只能计算到10476 。这是为什么呢???

     

    补:昨天睡觉的时候突然想明白了,原因是 sump有两个参数 压入栈的上下文比较大。

    验证:

    第一组:确实随着参数变多,深度变浅。

     第二组,说明传参变多 深度变浅。

    但是这里又有一个新问题,为什么 x=>{...} 要比 ()=>{...} 还要深呢?

     测试代码:

    try{ var i =0,loop=(x)=>loop(i++),n=loop(1) }catch {i}  
    
    var sump = (x,y)=>x==0?(y):sump(x-1,y+x);
    
    var sum = x=> x===1?(x):x + sum(x-1);
  • 相关阅读:
    javascript的严格模式:use strict
    Ionic在线打包IOS平台应用
    安装nodejs6.9x以后,原来在nodejs4.2.x中运行正常的ionic项目出现问题的解决
    cordova插件分类
    ionic 启用sass
    ngCordova
    为Asp.net WebApi 添加跨域支持
    使用ionic framework创建一个简单的APP
    研究主题
    近两天让我羞愧难当的遭遇
  • 原文地址:https://www.cnblogs.com/zhuwansu/p/13674142.html
Copyright © 2011-2022 走看看