闭包

闭包简介

闭包其实就是一个作用域,在这个作用域环境中的变量是私有的。

闭包的举例

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

这样既保存了,上一次执行结果,也防止恶意程序的修改

你可能感兴趣的:(闭包)