我有一个嵌套函数,它重写父函数中的变量。我尝试了两种不同的调用语法。两者都是合法的,但第二个会产生不良结果。
我知道范围是在定义期间确定的,但这似乎没有帮助,因为两个代码片段对我来说似乎是相同的。
var countUpFromZero = function() {
var count = 0;
return function() {
return ++count;
};
}();
countUpFromZero(); // Desirable result
var countUpFromZero = function() {
var count = 0;
return function() {
return ++count;
};
};
countUpFromZero()(); //Undesirable result
最佳答案
您的问题没有说明,但我假设问题是当您多次调用该函数时会发生什么。问题很简单。让我们稍微改变一下,定义一下:
var make_a_counter = function() {
var count = 0;
return function() {
return ++count;
};
};
现在,让我们向您的第一个示例添加一个变量:
var counter = make_a_counter();
counter(); // returns 1
counter(); // returns 2
很简单,对吧?您的第二个示例相当于:
make_a_counter()(); // returns 1
make_a_counter()(); // returns 1, because you made a *new* counter!
除了在第一个示例中,如所提供的,您从未给 make_a_counter
命名,而是在定义时使用 ()
调用它,因此您只需可以制作一个计数器。如果你延迟调用它,你可以制作任意数量的它们,并精确控制它们的持续时间。
关于javascript - 无法区分 "similar"代码之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308126/