简介 JavaScript 闭包

闭包(closure)

一.概念

闭包指的是有权访问另一个函数作用域的变量的函数。

二.为什么使用闭包

我们知道js中函数内部可以访问全局的变量,例如:

// An highlighted block
var n=1999;
function f(){
alert(n);
}
f();      //1999

一般来说,当函数执行完毕之后,局部活动对象(类似c++中的局部变量)就会被销毁,内存中仅保存全局执行环境的变量对象(c++的全局变量)。闭包的情况与之有所不同。

// An highlighted block
  function f1(){
      var i=999;
      iAdd=function(){i+=1}
      function f2(){
           alert(i);
             }
      return f2;
}
  var result=f1();
  result(); // 999  
  iAdd();  
  result(); // 1000

--------这边函数f2就是一个闭包,通过上面这段代码我们能够发现,在第一次调用完之后,局部变量 n 并未被释放!这就是闭包的用途
(1)可以在函数外访问函数的局部变量
(2)可以让这些变量保存,不在函数被调用完之后立即被释放内存。(这与JavaScript采用的垃圾回收机制有关)

三.闭包使用的注意事项

1.内存泄漏

IE9之前的版本对于js对象和COM对象使用不同的垃圾收集方式,因此在这种版本中闭包某些元素可能无法销毁,有可能导致网页性能或者内存泄露的问题。

2.安全性问题

闭包可以在函数外部,改变函数内部变量的值。因此在使用的闭包的时候一定要慎用,防止不小心修改函数内某个变量的值从而导致错误。

参考书籍: javascript高级程序设计

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