Javascript闭包返回函数
我试图学习javascript中的闭包,遇到了以下示例:Javascript闭包返回函数,javascript,closures,Javascript,Closures,我试图学习javascript中的闭包,遇到了以下示例: function counter() { var count = 0; return function() { alert(count++); } } var count = counter(); count(); count(); count(); 这对我来说很有意义,我的问题是,为什么这不起作用 var count = function() { var count = 0; r
function counter() {
var count = 0;
return function() {
alert(count++);
}
}
var count = counter();
count();
count();
count();
这对我来说很有意义,我的问题是,为什么这不起作用
var count = function() {
var count = 0;
return function() {
alert(count++);
}
};
count();
count();
count();
对我来说,它似乎应该是完全相同的东西,但可能我只是遗漏了一些明显的东西,请帮助。在您使用闭包之前,您必须调用外部函数来创建闭包,并获取返回的内部函数,然后保留返回结果,然后可以调用后续时间来使用闭包。因此,在第二个示例中,您必须调用
count()
并保留其返回结果,然后将该返回结果用于后续调用
如果您将第二个示例更改为此(看起来与第一个示例几乎相同),则第二个示例将起作用:
//用于代码段的日志输出
函数日志(x){
var div=document.createElement(“div”);
div.innerHTML=x;
文件.正文.附件(div);
}
var计数器=函数(){
var计数=0;
返回函数(){
日志(count++);
}
};
//获取内部函数并创建闭包
变量计数=计数器();
计数();
计数();
计数()代码>为了让第二个方法工作,您需要像下面这样调用返回的函数:
var count = function() {
var count = 0;
return function() {
alert(count++);
}
};
count()();
但是,这样做,您的计数不会增加,因为它不会像第一个示例中那样存储在任何位置,在第一个示例中,变量count
保存函数
因此,如果要保留count的值,请使用第一种方法,即var count=counter()
希望能把事情弄清楚 我将尝试在您的代码中给出一个很好的解释:
function counter() {
var count = 0;
// By calling the function counter (adding a '()' after its name) you are returning a brand new anonymous function
return function() { // **Reference 1**
alert(count++);
}
}
// Here, the count variable is actually the anonymous function you returned in the **Reference 1**
var count = counter();
// In this line, you are calling the anonymous function (adding the '()' after its new name 'count')
count();
上面的解释解释了为什么会这样。因为,首先您调用了一个函数,该函数返回一个匿名函数并将其分配给变量count。然后通过在函数名后添加“()”来调用该函数,该函数执行警报(count++)
现在,为什么另一个例子不起作用?我想现在很明显:
var count = function() {
var count = 0;
return function() { // **Reference 2**
alert(count++);
}
};
// Here you are calling the count function which returns the anonymous function in the line **Reference 2**.
count(); // So, long story short, this call only returns the anonymous function.
您应该尝试在其后面添加第二个“()”:count()代码>。这也应该起作用,因为第一个“()”返回匿名函数,第二个执行返回的匿名函数
希望这有帮助 谢谢大家,你们所有的答案都很有帮助,我非常感谢你们在这里多做了一点,并在代码中解释了答案,我现在完全理解了。太棒了@SeptimaEspada。这是一个非常简单的概念,对于Javascript高级编程非常有用。很高兴能帮助你!:)