计数器(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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值