第 166 题:闭包 JS 基础 编程题(字节)

发布于 2022-09-29 15:58:17 字数 193 浏览 121 评论 8

var foo = function(...args) { // 要求实现函数体}
var f1 = foo(1,2,3); f1.getValue(); // 6 输出是参数的和
var f2 = foo(1)(2,3); f2.getValue(); // 6
var f3 = foo(1)(2)(3)(4); f3.getValue(); // 10

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

难理解 2022-05-04 13:27:54

Tip:

  1. 返回值是一个函数
  2. 动态参数,拼接参数,getValue 统一计算
function foo(...args) {
  let addArgs = [...args];
  function fn(...innerArgs) {
    addArgs = [...addArgs, ...innerArgs];
    return fn;
  }
  fn.getValue = function () {
    return addArgs.reduce((pre, cur) => {
      return pre + cur;
    }, 0);
  };
  return fn;
}

const sum = foo(1, 2, 3)(2)(3).getValue();
// const sum = foo(1, 2, 3).getValue();
console.log("sum", sum);

更多解析

筱武穆 2022-05-04 13:05:17
const foo = (...args) => {
  const _add = (...args1) => {
    return foo(...args, ...args1);
  }

  _add.getValue = () => args.reduce((acc, cur) => acc + cur);

  return _add;
}
山人契 2022-05-04 12:43:43
function foo(...args) {
  const sum = args.reduce((acc, v) => acc + v, 0);

  const hof = function (...args) {
    return foo(sum, ...args);
  };
  hof.getValue = () => sum;

  return hof;
}
栩栩如生 2022-05-04 07:52:05
const foo = function() {
    let args = Array.prototype.slice.call(arguments);
    const target = function() {
        args = args.concat(Array.prototype.slice.call(arguments));
        return foo(...args);
    };
    target.getValue = () => args.reduce((x, y) => x + y, 0);
    return target;
};
屋顶上的小猫咪 2022-05-04 05:27:11

@Ishmael-Yoko 不错,大概跟面试官想要的一致。

寄居者 2022-05-03 06:18:30
function foo(...args) {
  const target = (...arg1s) => foo(...[...args, ...arg1s])
  target.getValue = () => args.reduce((p, n) => p+ n, 0)
  return target
}
萤火眠眠 2022-05-02 18:57:01
function foo(...args) {
  foo.value = args.reduce((total, cur) => total + cur, (foo.value || 0))
  return foo
}

foo.getValue = function () {
  var value = this.value;
  this.value = 0;
  return value
}
阳光①夏 2022-05-01 20:17:31
Function.prototype.getValue = function () {
    let num = this.arr.reduce((x, y) => (x + y))
    this.arr = null
    return num
  }
  var foo = function (...args) {
    if (!Array.isArray(foo.arr)) {
      foo.arr = []
    }
    foo.arr.push(...args)
    return foo;
  }
~没有更多了~

关于作者

凡间太子

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文