请你写一个函数 createCounter. 这个函数接收一个初始的整数值 init 并返回一个包含三个函数的对象。

这三个函数是:

  • increment() 将当前值加 1 并返回。
  • decrement() 将当前值减 1 并返回。
  • reset() 将当前值设置为 init 并返回。

示例 1:

        
code
1234567
输入:init = 5, calls = ["increment","reset","decrement"] 输出:[6,5,4] 解释: const counter = createCounter(5); counter.increment(); // 6 counter.reset(); // 5 counter.decrement(); // 4

示例 2:

        
code
123456789
输入:init = 0, calls = ["increment","increment","decrement","reset","reset"] 输出:[1,2,1,0,0] 解释: const counter = createCounter(0); counter.increment(); // 1 counter.increment(); // 2 counter.decrement(); // 1 counter.reset(); // 0 counter.reset(); // 0

提示:

  • -1000 <= init <= 1000
  • 总调用次数不会超过 1000

该题考验对闭包的理解以及 前置i++后置i++的区别

        
TypeScript
12345678910111213141516171819202122232425262728293031
type ReturnObj = { increment: () => number, decrement: () => number, reset: () => number, } function createCounter(init:number): ReturnObj { let num = init const increment = () => { return ++num } const decrement = () => { return --num } const reset = () => { return num = init } return { increment, decrement, reset } }; /** * const counter = createCounter(5) * counter.increment(); // 6 * counter.reset(); // 5 * counter.decrement(); // 4 */