javascript - Js面试题。,都有哪些比较好的解法?
阿神
阿神 2017-04-11 13:08:48
[JavaScript讨论组]

实现一个函数,运算结果可以满足如下预期结果:

add(1)(2) // 3
add(1, 2, 3)(10) // 16
add(1)(2)(3)(4)(5) // 15

阿神
阿神

闭关修行中......

全部回复(8)
伊谢尔伦
    function add(...values) {
        let sum = 0;
        for (key of values) {
            sum += key;
        }
        let tmp = (x) => {
            sum += x;
            return tmp;
        };
        tmp.toString = () => sum;

        return tmp;
    }
    
add(1)(2) // 3
add(1, 2, 3)(10) // 16
add(1)(2)(3)(4)(5) // 15
PHP中文网

add(1)(2)(3)

function add(x) {
    var sum = x;
    var tmp = function (y) {
        sum = sum + y;
        return tmp;
    };
    tmp.toString = function () {
        return sum;
    };
    return tmp;
}
console.log(add(1)(2)(3));  //6
console.log(add(1)(2)(3)(4));   //10
PHP中文网

你可能需要柯里函数

PHP中文网

这个链接有很多方法,我就不一一列举了。
另外再补个链接,关于toString和valueOf的点我

巴扎黑
function add(){
    var sum = 0;
    var slice = Array.prototype.slice;
    
    var f = function(){
        var params = slice.apply(arguments);
        params.forEach(function(it){
            sum+=it;
        });
        f.val = sum;
        return f;
    }
    
    return f.apply(null,slice.apply(arguments));
}

console.info(add(1)(2)(3)(4)(5)(6,7).val);// 28
迷茫
const add = sum => {
  const calc = n => add(sum + n)
  calc.toString = () => sum
  return calc
}

add(1)(2)(3)(4)
ringa_lee

不管是改写toString方法还是valueOf方法(toString会调用valueOf),都无法实现直接读取值,因为直接读取值并不会调用toString方法,所以add(1): { [Function: b] toString: [Function] } ; add(1)+0 : 1。
代码:

function add(){
    var sum = 0;
    for(let num of arguments)
        sum += num;
    function b(){
        for(let num of arguments)
            sum += num;
        return b;
    };
    b.toString = function(){return sum};
    return b;
}
console.log(add(1));// { [Function: b] toString: [Function] }
console.log(add(1)+0);// 1
迷茫

非主流版:

function add(...values) {
    let tmp = (x) => {
        values.push(x);
        return tmp;
    };
    tmp.toString = () => new Function('return ' + values.join('+'))();
    return tmp;
}
console.log(add(1)(2)); // -> 3
console.log(add(1, 5)(2)); // -> 8
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号