我知道封闭是什么,但我仍然不明白为什么(或何时)你会使用它们

fum*_*huu 12 javascript closures programming-languages

我对闭包的理解是它们本质上是一个函数,它使用一个你认为超出范围的变量.我想这是我前几天看到的一个例子:

function closureMaker(somearg)
{
    var local_value = 7;
    function funcToReturn(arg1, arg2)
    {
        return local_value + somearg + arg1 + arg2;
    }
    return funcToReturn;
}
var myClosure = closureMaker(6);  //make the closure
myClosure(2, 3);                  //using it
Run Code Online (Sandbox Code Playgroud)

现在闭包有local_value甚至是原始的arg,somearg.但我不明白为什么这些都有帮助.使用'free'变量local_value有什么意义,甚至更不为我所知,为什么你会在闭包函数中使用closureMaking函数的参数?

我对如何在javascript中使用它更感兴趣,这是否用于AJAX请求和对象?

我得到了什么.我需要为什么.

CMS*_*CMS 6

闭包最实用和最广泛使用的一种方法是实现私有特权成员,例如:

function Test (param) {
  var secret = 3;
  function privateMethod() {
    //...
  }
  this.publicMember = param;
  this.privilegedMember = function () {
    return secret * param;
  };
}

var foo = new Test(10);
foo.privilegedMember(); // 30
foo.secret; // undefined
Run Code Online (Sandbox Code Playgroud)

模块模式也可以使用相同的原理,如一个很好的例子:

var myModule = (function () { 
  var obj = {}, privateVariable = 1; 

  function privateMethod() { 
    // ... 
  } 

  obj.publicProperty = 1; 
  obj.publicMethod = function () { 
    // private members available here... 
  }; 

  return obj; 
}());
Run Code Online (Sandbox Code Playgroud)


Mat*_*yra 0

这可能不是您想要的,但是有一篇关于 Java 闭包(它们应该/可以如何实现)的精彩讨论,其中还介绍了一些关于您想要在哪里使用它们的示例

http://www.youtube.com/watch?v=0zVizaCOhME