JavaScript私有变量可以用到闭包。
参考https://www.runoob.com/js/js-function-closures.html
注意下例中计数结果为3:
var add = (function () {
var counter = 0;
return function () {return counter += 1;} //返回方法引用
})();
unction myFunction(){
document.getElementById("demo").innerHTML = add();
}
myFunction(); myFunction(); myFunction(); // 计数器为 3
上面于如下结果相同:
function ll () {
var counter = 0;
return function () {return counter += 1;} //返回方法引用
}
var add = ll(); //执行后返回方法引用
function myFunction(){
//如果此次再次执行“add = ll();”那么最终结果就会是1,因为这样的话相当于会重新初始化“ll()”中的“var counter = 0;”
document.getElementById("demo").innerHTML = add();
}
myFunction(); myFunction(); myFunction(); // 计数器为 3
由此可见,方法A返回的是其中声明的另一方法B引用时, 再次引用同一个方法A的实例中的方法B时并不会再次执行方法A中的除返回的方法B中的其他语句(比如方法B以外的化初始化变量)。 (似乎有点绕^_^)