关于js中闭包 私有变量计数器的问题
在第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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先,要理解闭包的概念,你可以网上搜一下,总之可以简单点的定义为:定义在一个函数内部的函数
所以,你的bb函数就是一个闭包。
由于闭包中的变量是驻留在内存中,不会随着函数执行完毕而销毁。
你的变量a是不会被销毁的。
所以你每次调用count()都会使得变量a累加。你一共调用了5次,a累加到了5。
当你 “var c = count();” 的时候,其实是把第五次调用count函数的返回值赋值给了变量c。
之后你输出了三次变量c,当然结果(第五次调用count函数的返回值)都是5了。
明白函数调用吗?
道理是一样的,c是函数的结果。
具体到你的代码,count也是个函数,只是它有个闭包,所以每次调用结果不一样。
老哥啊,一个是函数调用,一个是固定值啊。
var c=count();
这是赋值语句,c就固定不变了。count()
;这是直接调用,每次调用都重新计算,返回的自然不一样。基础不扎实啊。