计数器(JS闭包)

实现一个计数器,counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值;

var createCounter = function (n) {
        return function () {
            return n++
        }
    }
    const counter = createCounter(-2);
    console.log("counter", counter());
    console.log("counter", counter());
    console.log("counter", counter());
    console.log("counter", counter());

输出[-2,-1,0,1]

闭包满足n的变量,调用过程中不会在外部被改变,也不会被重置。
在js中所有函数都可以访问上一层作用域,父函数中定义子函数,子函数可以访问父函数中的值,子函数相当于一个闭包函数。父函数调用子函数进行计数,n不会被重置,且不能被外部所改变,只有重新调用父函数,才会重置。
调用父函数时,返回的是一个函数,相当于要执行createCounter()() 才会有输出值;
也可以如此定义:

var createCounter = (function (n = 0) {
        return function () {
            return (++n);
        }
    })();//定义了父函数,同时立即执行该函数,返回一个闭包函数
    console.log("counter", createCounter());
    console.log("counter", createCounter());
    console.log("counter", createCounter());

你可能感兴趣的:(算法,js/jq,javascript,算法)