关于js中闭包 私有变量计数器的问题

发布于 2022-09-06 15:24:36 字数 803 浏览 19 评论 0

在第5次弹出之后 值不增加了
如果alert(count());方式弹出的话 会正常增加 +1
赋值给变量之后 var c = count();值就不变了
求大神指点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        var count = (function(){
            var a = 0;
            function bb(){
                a ++;
                return a;
            }
            return bb;
        })();

    alert(count());    //弹出1
    alert(count());    //弹出2
    alert(count());    //弹出3
    alert(count());    //弹出4

    var c = count();

    alert(c);    //弹出5
    alert(c);    //弹出5
    alert(c);    //弹出5
    

    </script>
</head>
<body>
    
</body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

深居我梦 2022-09-13 15:24:36

首先,要理解闭包的概念,你可以网上搜一下,总之可以简单点的定义为:定义在一个函数内部的函数

所以,你的bb函数就是一个闭包。

由于闭包中的变量是驻留在内存中,不会随着函数执行完毕而销毁。

你的变量a是不会被销毁的。

所以你每次调用count()都会使得变量a累加。你一共调用了5次,a累加到了5。

当你 “var c = count();” 的时候,其实是把第五次调用count函数的返回值赋值给了变量c。

之后你输出了三次变量c,当然结果(第五次调用count函数的返回值)都是5了。

娇纵 2022-09-13 15:24:36

明白函数调用吗?

function f() {
   return 1;
}

alert(f())

c = f()

alert(c)

道理是一样的,c是函数的结果。

具体到你的代码,count也是个函数,只是它有个闭包,所以每次调用结果不一样。

待天淡蓝洁白时 2022-09-13 15:24:36

老哥啊,一个是函数调用,一个是固定值啊。
var c=count();这是赋值语句,c就固定不变了。
count();这是直接调用,每次调用都重新计算,返回的自然不一样。
基础不扎实啊。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文