在第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>
首先,要理解闭包的概念,你可以网上搜一下,总之可以简单点的定义为:定义在一个函数内部的函数
所以,你的bb函数就是一个闭包。
由于闭包中的变量是驻留在内存中,不会随着函数执行完毕而销毁。
你的变量a是不会被销毁的。
所以你每次调用count()都会使得变量a累加。你一共调用了5次,a累加到了5。
当你 “var c = count();” 的时候,其实是把第五次调用count函数的返回值赋值给了变量c。
之后你输出了三次变量c,当然结果(第五次调用count函数的返回值)都是5了。