var add = (function () {
var counter = 0;
return function () {return counter += 1;} // 返回函数,counter只会被初始化一次
})();
add();
add();
add();
// 计数器为 3
/*
变量 add 指定了函数自我调用的返回字值。
自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。
add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。
这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。
计数器受匿名函数的作用域保护,只能通过 add 方法修改。
*/
加深理解
<html>
<head>
</head>
<body>
</body>
<script>
var a = 3;
debugger;
console.log(a) // 3
var a = 4;
console.log(a); // 4
(function add(){
console.log(a) // 4
a = a+1
console.log(a) // 5
})()
console.log(a); // 5
function redefine(){
console.log(a) // undefined 下面有对a
var a = 9
console.log(a) // 9
}
redefine()
console.log(a) // 5
a = 50
console.log(a) // 50
console.log(this.a) // 50
console.log(window.a) // 50
</script>
</html>
<html>
<head>
</head>
<body>
</body>
<script>
var counter = 1;
var add = (function(){
var counter = 5;
return function(){
counter+=1
console.log(counter)
}
})();
console.log(counter) // 1
add() // 6
add() // 7
add() // 8
console.log(counter) // 1
</script>
</html>