| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1127 人关注过本帖
标题:从计算1+1的sum函数来聊聊javascript。
只看楼主 加入收藏
chaoslee
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-12-23
结帖率:0
收藏
 问题点数:0 回复次数:7 
从计算1+1的sum函数来聊聊javascript。
程序代码:
/**

 * @method sum1 求和函数

 * @param a { Number } 参数1

 * @param b { Number } 参数2

 * @return { Number } 两个参数的和

 */
function sum1(a,b){
    return a+b;
}



程序代码:
/**

 * @method sum2 求和函数

 * @param list { Array } 一个列表

 * @return { Number } 列表中所有元素的和

 */
function sum2(list){
    var s = 0;
    for(var i=0;i<list.length;i++){
        s = s + list[i];    //也可写为 s += list[i];
    }
    return s;
}



var list = [1,2,3];
alert(sum2(list));





程序代码:
/**

 * @method sum 求和函数

 * @param ... 若干参数

 * @return { Number } 所有形参的和

 */
function sum3(){
    var s = 0;
    for(var i=0;i<arguments.length;i++){
        s = s + arguments[i];    //也可写为 s += arguments[i];
    }
    return s;
}




程序代码:
/**

 * @method sum4 求和函数

 * @param a { Number } 参数1

 * @param b { Number } 参数2

 * @return { Number } 两个参数的和

 */
function sum4(a, b){
    return a+b;
}


/**

 * @method sum4 求差函数

 * @param a { Number } 参数1

 * @param b { Number } 参数2

 * @return { Number } 参数1和参数2的差

 */
function sub(a, b){
    return a-b;
}


/**

 * @method trans_multi 将函数转换为多参数版本

 * @param fn {Function} 待转换函数

 * @return {Function} 转换后的函数

 */
function trans_multi(fn){
    return function(){
        var args = arguments;
        
        var first = args[0];
        
        for(var i=1;i<args.length;i++){
            first = fn(first, args[i]);
        }
        return first;
    }
}


var multi_sum = trans_multi(sum4);
var multi_sub = trans_multi(sub);
alert(multi_sum(1,2,3));
alert(multi_sub(3,2,1));


程序代码:
/**

 * @method sum5 递归求和函数(依靠栈保存累加值)

 * @param ... 多个形参

 * @return { Number } 形参的和

 */
function sum5(){
    var args = Array.prototype.slice.call(arguments);
    if(args.length){
        return args[0] + sum5.apply(null, args.slice(1));
    }else{
        return 0;
    }
}


alert(sum5(1,2,3));


/**

 * @method sum6 递归求和函数(依靠参数保存累加值)

 * @param ... 多个形参

 * @return { Number } 形参的和

 */
function sum6(list, sum){
    if( !(list instanceof Array) ){
        return sum6.call(null, Array.prototype.slice.call(arguments), 0);
    }else{
        if(list.length){
            return sum6(list.slice(1), list[0]+sum);
        }else{
            return sum;
        }
    }
}

alert(sum6(1,2,3));


/**

 * @method plat_recursive 递归平坦化

 * @param fn {Function} 递归函数

 * @return {Any} 将递归平坦化后的返回值

 */
function plat_recursive(fn){
    return function(init){
        var i=0, args=Array.prototype.slice.call(arguments), len=args.length;
        
        if(!init){
            for(; i<len; i++){
                if(i in args){
                    init = args[i];
                    break;
                }
            }
        }
        i+=1;
        
        for(; i<len; i++){
            init = fn(init, args[i]);
        }
        return init;
    };
}

var plat_sum5 = plat_recursive(sum5);
var plat_sum6 = plat_recursive(sum6);

alert(plat_sum5(1,2,3));
alert(plat_sum6(1,2,3));


[ 本帖最后由 chaoslee 于 2011-5-16 13:33 编辑 ]
搜索更多相关主题的帖子: javascript return 元素 
2011-03-21 19:11
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
顶!

   唯实惟新 至诚致志
2011-03-21 21:40
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
看到用5包咖啡写出来的代码时,我哭了
2011-03-22 08:59
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
楼主,你的博客是不是挂掉了
2011-03-22 15:32
chaoslee
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-12-23
收藏
得分:0 
嗯,昨天和今天访问不太畅通,因为域名到期了,昨天刚续费,这两天就会恢复,谢谢关注 :)
2011-03-23 11:26
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
收藏
得分:0 
5包咖啡的代码让我前后思考了连吸5根烟的时间!

最后我不得不说:


Q:1428196631,百度:开发地 即可找到我,有事请留言!
2011-03-24 14:40
argont
Rank: 2
等 级:论坛游民
帖 子:13
专家分:10
注 册:2011-3-8
收藏
得分:0 
我是这样写的。。。

function sum() {
    if(!arguments.length) { return 0; }
    else { return arguments[0] + sum.apply('',[].slice.call(arguments, 1)); }
}

http:///langzs/  web前端开发
2011-04-10 11:51
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
回复 7楼 argont
同sum5
个人感觉用静态调用Array.prototype.slice.call,性能上可能会更好一点吧
2011-04-10 12:30
快速回复:从计算1+1的sum函数来聊聊javascript。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026389 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved