闭包
闭包简介
闭包其实就是一个作用域,在这个作用域环境中的变量是私有的。
闭包的举例
var scope = 'global';
function checkScope(){
var scope = 'local';
function f(){
console.log(scope);
}
f();// => 'local'
}
console.log(scope);//=> 'global'
从上例可以看出,局部变量的优先级比全局变量的优先级高,闭包里面的变量对于外部是私有的
利用这个机制,可以写出很有意思的程序
当我们要看这个程序之前先来看一个程序
/*
*用来计算
*/
function count(){
count.n ++;
}
count.n = 0;
count();//=>1
count();//=>2
count.n ++;//=>3
从上面可以看出,用属性的方法,的确可以保持上一次执行的结果,而且也用到面向对象的思想,但是从最后一行代码可以看出,此方法,可能被恶意的程序所修改值。为此我们可以利用闭包的思想
var count = (function(){
var n = 0;
return function(){
n++;
return n;
}
}());
count(); //=>1
count(); //=>2
count(); //=>3
这样既保存了,上一次执行结果,也防止恶意程序的修改