繁体   English   中英

变量调用 function 和直接调用 function

[英]variable calling function and calling function directly

我正在学习 JavaScript 和 Manning 的书 Get Programming with JavaScript(作者 John Larsen)。 在第 11 章清单 11.8 中,代码:

var getCounter = function () {
    var counter = 0;
    var countUpBy1 =  function () {
        counter = counter + 1;
        return counter;
    };  
    return countUpBy1;
};
var count = getCounter();

我正在使用 jsbin.com 进行实验和学习。 在控制台中:

Q1) 为什么调用count(),结果并不总是1? 为什么呢,计数器一开始就设置为0,在countUpBy1之前,countUpBy1里面的计数器不应该也是0吗?

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

function () {
    counter = counter + 1;
    return counter;
}

感谢您提前解释。

4/Nov: @DavidFleeman: Am I correct in my understand to first question (I read all 3 links, plus JavaScript Closures 101: What is a closure ?, I never understood JavaScript closures & JavaScript Closures Explained by Mailing a Package :

(删除了我对逐步关闭的理解)

11 月 12 日: 我从来不理解 JavaScript 闭包多读几次这个链接,它比我解释得更好。

  1. 为什么调用 count() 并不总是等于 1?

这些嵌套方法创建了一个闭包,其中初始化只发生一次,并且每次都返回嵌套的内部方法。 请阅读此链接以了解:

https://www.w3schools.com/js/js_function_closures.asp

如果您更喜欢 MDN,请使用以下链接。 但是,上面的链接有我认为与成员的情况相匹配的示例:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

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

https://blogs.msdn.microsoft.com/ericlippert/2003/09/17/what-are-closures/

  1. 为什么 getCounter() 返回 function object 而不是执行方法?

阅读上面的相同链接,您可以看到如何定义 getCounter() 以完全按照您的要求执行。 您必须将其定义为自调用 function。 在您的示例中,它不是使用自调用语法定义的。 如果您想使用 getCounter() 而不是 count() 来定义它,请参见下面的示例。

var getCounter = (function () {
  var counter = 0;
  var countUpBy1 =  function () {
    counter = counter + 1;
    return counter;
  };  
  return countUpBy1;
})();
getCounter();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM