Skip to content

4.实现一个sum函数 #6

Open
@webVueBlog

Description

@webVueBlog
  1. sum函数可以传递一个或者多个参数
  2. sum函数调用后返回的是一个新的函数且参数可传递一个或者多个
  3. 调用.valueOf时完成最后计算
sum(1, 2, 3).valueOf() // 6
sum(2, 3)(2).valueOf() // 7
sum(1)(2)(3)(4).valueOf() // 10
sum(2)(4, 1)(2).valueOf() // 9
const sum = () => {
 let args = [...arguments];
 const func = () => {
  args = [...args, ...arguments];
  return func;
 }
 func.valueOf = () => args.reduce((cur, prev) => cur + prev);
 return func;
}
const sum = (...args1) => {
  const fullArgs = [...args1];
  const fn = (...args2) => {
    // 收集参数
    fullArgs.push(...args2)
    // 返回自身保持链式调用
    return fn;
  };

  // 重写valueOf,累加已收集的参数
  fn.valueOf = () => fullArgs.reduce((total, cur) => total + cur)

  return fn;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions