我正在研究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'每次调用函数时都会调用?不会重置计数变量的值吗?
答案 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()时执行的函数。