zoukankan      html  css  js  c++  java
  • Javascript一道面试题

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

    add(1)(2) // 3
    add(1, 2, 3)(10) // 16

    add(1)(2)(3)(4)(5) // 15

    function add () {
                var args = Array.prototype.slice.call(arguments);
     
                var fn = function () {
                    var arg_fn = Array.prototype.slice.call(arguments);
                    return add.apply(null, args.concat(arg_fn));
                }
     
                fn.valueOf = function () {
                    return args.reduce(function(a, b) {
                        return a + b;
                    })
                }
     
                return fn;
            }
    
            console.log(add(1));    //1
            console.log(add(1, 2));  //3
            console.log(add(1, 2)(3));  //6
            console.log(add(1)(2)(3)(4)); //10

    可以看到,这里其实有一种循环。只有最后一次调用才真正调用到 valueOf,而之前的操作都是合并参数,递归调用本身,由于最后一次调用返回的是一个 fn 函数,所以最终调用了函数的 fn.valueOf,并且利用了 reduce 方法对所有参数求和.

  • 相关阅读:
    延迟为程序集签名
    bootshrap会改变IE浏览器滚动条样式
    Spark算子选择策略
    kafka常用系统命令-1
    数据结构-树
    1.PyCharm 用法
    sql 语句用法
    linux命令
    linux命令
    es的相关知识二(检索文档)
  • 原文地址:https://www.cnblogs.com/meiyh/p/6520118.html
Copyright © 2011-2022 走看看