JavaScript闭包的实际用法/示例

4
我知道 JavaScript 闭包的理论概念,比如内部函数只能访问一个变量等等,这样就可以在 JS 中实现私有变量。
但是我想要了解一些实际的例子,证明闭包确实有用。所以我需要实例,而不是了解什么是闭包。

可能是JavaScript闭包如何工作?的重复问题。我认为那个问题也应该被关闭,因为它不具有建设性,但它在这里。 - gdoron
这个问题可能更适合在[programmers.se]上提问。在这里感觉太过开放了。 - John Dvorak
两件事情:1)为了防止其他访问它们的函数无意中修改它们的值。2)如果您安装了一个使用JavaScript具有与您变量相同名称的全局变量的浏览器插件,会发生什么? - Gaurav Pandey
1个回答

10

两个标准示例:

1) 保存回调函数的变量:

   var a = [1, 2, 3];
   for (var i=0; i<a.length; i++) {
      (function(j){
          setTimeout(function(){
             console.log(a[j]);
          }, 1000*j);
      })(i);
   }

2) 保持变量私有化

var obj = (function(){
    var private = 0;
    return {
        increment: function(){ private++; },
        getValue:  function(){ return private; }
    }
})();

事实上,最简单的方法是记住一件事情:闭包是函数与其创建时所在作用域之间的链接。这个链接防止了作用域(及其变量)被垃圾回收,并且它是访问该作用域的唯一可访问链接(因此具有隐私性)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接