Javascript 变量调用函数和直接调用函数

Javascript 变量调用函数和直接调用函数,javascript,function,Javascript,Function,我正在学习曼宁的书《用JavaScript编程》(约翰·拉森著)中的JavaScript。在第11章清单11.8中,代码: var getCounter=函数(){ var计数器=0; var countUpBy1=函数(){ 计数器=计数器+1; 返回计数器; }; 返回计数1; }; var count=getCounter(); 我正在使用jsbin.com进行实验和学习。在控制台中: Q1)为什么调用count(),结果并不总是1?为什么,计数器在开始时设置为0,在countupy

我正在学习曼宁的书《用JavaScript编程》(约翰·拉森著)中的JavaScript。在第11章清单11.8中,代码:

var getCounter=函数(){
var计数器=0;
var countUpBy1=函数(){
计数器=计数器+1;
返回计数器;
};  
返回计数1;
};
var count=getCounter();
我正在使用jsbin.com进行实验和学习。在控制台中:

Q1)为什么调用count(),结果并不总是1?为什么,计数器在开始时设置为0,在countupy1之前,countupy1内部的计数器不也应该为0吗

为什么调用getCounter()与count()不同?调用count()获取一个数字(这是我所期望的),但调用getCounter()获取我:

函数(){
计数器=计数器+1;
返回计数器;
}
谢谢你提前解释

11月4日: @大卫·弗里曼:我对第一个问题的理解正确吗(我阅读了所有3个链接,加上?,&:

(删除了我对逐步结束的理解)

11月12日: 多读几遍这个链接,它的解释比我能读的好

  • 为什么调用count()并不总是等于1
  • 这些嵌套方法创建一个闭包,其中初始化只发生一次,每次都返回嵌套的内部方法。请阅读此链接以了解:

    如果您更喜欢MDN,请使用下面的链接。但是,我相信上面的链接有与该成员的场景相匹配的示例:

    对于更多细节,这似乎是一个深思熟虑的解释:

  • 为什么getCounter()返回函数对象而不是执行方法
  • 阅读上面的同一链接,您可以看到如何定义getCounter()以完全执行您要求它执行的操作。您必须将其定义为一个自调用函数。在您的示例中,它不是使用自调用语法定义的。如果要定义它以使用getCounter()而不是count()工作,请参阅下面的示例

    var getCounter=(函数(){
    var计数器=0;
    var countUpBy1=函数(){
    计数器=计数器+1;
    返回计数器;
    };  
    返回计数1;
    })();
    getCounter();
    
    阅读闭包来理解1。
    count=getCounter()
    所以你应该期望
    count()
    类似于
    getCounter()
    ,而不是
    getCounter()
    @Nishant。谢谢你指出我需要理解的主题。@Ry:有没有一个专门的术语来描述两对括号,()()?我不知道你可以这样调用嵌套函数(或者我在这里的理解不正确?@ac88:任何表达式都可以调用。
    (1+2)(
    是一个调用(但在运行时它会失败,因为
    3
    不是一个函数)。
    getCounter()
    是一个表达式,因此可以对其进行计算并调用其值。我建议不要使用W3学校作为参考。MDN更好,定期更新且准确。理解,但这是我在谷歌找到的第一篇对闭包有最简单解释的文章。我想这个例子与该成员试图理解的内容相符。I've更新了文章中的几个链接。@DavidFleeman:你能为Q2中的外部函数修好右大括号“}”到圆括号“)”吗?@ac88修好了括号