为什么(_ = 1)=> $ => _ ++是一个计数器

时间:2018-10-11 20:24:41

标签: javascript

一个朋友在Javascript求职面试中遇到了这个问题:

说明此计数器的工作原理(换句话说,非最小版本是什么)

    let Counter = (_=1)=>$=>_++
    let c1 = Counter()
    console.log(c1()) //1
    console.log(c1()) //2

2 个答案:

答案 0 :(得分:4)

这与

相同
const Counter = function(counter = 1) {
  return function count() {
    return counter++;
  };
}

因此,基本上,当您调用Counter()时,它会将counter封装为1作为默认值,并且每次调用它返回的count函数时,它都会返回计数器值并将其增加1

答案 1 :(得分:1)

(_=1)=>$=>_++

这是使用箭头语法的函数,它等于

function f(_ = 1) {
    return $ => _++;
}

$ => _++;也是箭头功能,它捕获闭包_,对它进行增量计算并返回(后缀递增,因此实际上它返回值并随后递增):

function f(_ = 1) {
    return function($) { return _++; };
}

所以代码等于

function Counter(count = 1) {
    return function() { return count++; };
}

((将_重命名为count,并删除了多余的$变量)

函数Counter每次都从count值开始,像计数器一样,返回前一个值+ 1