闭包和变量定义

时间:2014-04-22 20:14:57

标签: javascript

我正在研究CodeSchool上的一个特定示例,该示例应该用来举例说明闭包。我无法理解一个简单的概念。有人能指出我正确的方向吗?

function warningMaker( obstacle ){
var count=0;
return function ( number, location ) {
count++;
alert("Beware! There have been " +
      obstacle +
      " sightings in the Cove today!\n" +
      number +
      " " +
      obstacle +
      "(s) spotted at the " +
      location +
      "!\n" + "This is Alert #" + count+" today for"  +obstacle+ " danger."
     );
};
}

在这个函数中,如果我定义,var penguin = warningMaker(' penguin')。 然后我打电话给企鹅(1,'波士顿')作为例子。计数将返回1.每次调用此函数时,计数值都会增加。

我无法理解如何发生这种情况!?没有' var count = 0'每次调用函数时都会调用?不会重置计数变量的值吗?

2 个答案:

答案 0 :(得分:0)

仅调用一次warningMaker来创建企鹅对象。调用warningMaker时,会在其范围内创建变量count,并返回分配给penguin的函数。由于返回的函数是在warningMaker中定义的,因此它可以访问其范围,因此可以访问变量“count”。

闭包是在JavaScript中创建私有变量/方法功能的常用技术。

理解闭包的一个很好的资源可以在这里找到:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

最佳。

答案 1 :(得分:0)

在你的例子中,闭包的工作方式是它基本上创建一个count变量并将其保存在内存中。然后你的warningMaker函数返回另一个函数。它返回的函数是每次使用参数调用warningMaker()时执行的函数。