Javascript 闭包和变量定义
我正在研究一个关于CodeSchool的具体例子,这个例子应该是闭包的例子。我很难理解一个简单的概念。有人能给我指出正确的方向吗Javascript 闭包和变量定义,javascript,Javascript,我正在研究一个关于CodeSchool的具体例子,这个例子应该是闭包的例子。我很难理解一个简单的概念。有人能给我指出正确的方向吗 function warningMaker( obstacle ){ var count=0; return function ( number, location ) { count++; alert("Beware! There have been " + obstacle + " sightings in the Cove today!\
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”吗?这不会重置count变量的值吗 只调用一次warningMaker来创建企鹅对象。调用warningMaker时,将在其范围内创建变量count,并返回分配给penguin的函数。因为返回的函数是在warningMaker中定义的,所以它可以访问其范围,从而访问变量“count” 闭包是在JavaScript中创建私有变量/方法功能的常用技术 了解闭包的好资源可以在这里找到:
最好。在您的示例中,闭包的工作方式基本上是创建一个count变量并将其保存在内存中。然后,warningMaker函数返回另一个函数。它返回的函数是每次使用参数调用warningMaker()时执行的函数 每次调用
warningMaker()
时都会调用它(在本例中为一次),但初始化在penguin()
函数之外,因此它永远不会重置。penguin
包含由warningMaker
返回的值,这是一个函数。该函数不包含var count=0代码>。可能存在的重复项