闭包要解决的问题是:一个函数可以拥有私有变量,并且外部可以通过闭包访问该私有变量
闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。
直观的说就是形成一个不销毁的栈环境。
计数器实例:
<p>局部变量计数。</p>
<button type="button" onclick="myFunction()">+1</button>
<p id="demo">0</p>
var add =function () {
var counter = 0;
window.alert("父方法"); // 只有在 add 赋值时执行一次
return function () {
window.alert("子方法"); // 每次执行 add() 都会执行
return counter += 1;
}
// counter 作用域在父函数中, 自然在其子函数中也能使用,但因为
// 子函数还需要使用了count, 所以 count 不随着父函数一起释放。
// 利用在 function(){}() 的形式自动执行一遍父匿名函数, 赋给 add 子方法。
}();
function myFunction(){
document.getElementById("demo").innerHTML = add(); //这里add()执行的就是子方法
}
参考自菜鸟教程 :闭包