[英]Difference between calling an anonymous function directly vs calling it by variable?
[英]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 闭包多读几次这个链接,它比我解释得更好。
这些嵌套方法创建了一个闭包,其中初始化只发生一次,并且每次都返回嵌套的内部方法。 请阅读此链接以了解:
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/
阅读上面的相同链接,您可以看到如何定义 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.