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

我试图学习javascript中的闭包,遇到了以下示例:

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高级编程非常有用。很高兴能帮助你!:)