javascript - 无法区分 "similar"代码之间的区别

标签 javascript

我有一个嵌套函数,它重写父函数中的变量。我尝试了两种不同的调用语法。两者都是合法的,但第二个会产生不良结果。

我知道范围是在定义期间确定的,但这似乎没有帮助,因为两个代码片段对我来说似乎是相同的。

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/

相关文章:

javascript - toFixed 不是一个函数吗?

javascript - 推送时获取 Firebase UID,然后在 Java 中使用给定的 UID 再次推送

javascript - 在 Mozilla Add-On SDK 中限制 page-mod 目标的任何方法

javascript - 使用 Chai、Mocha、Express、johnny-five 和 node 编写测试时出现菜鸟错误

javascript - 如何从 document.getElementById javascript 制作下拉菜单

javascript - 关于 WebGL 的一些问题

javascript - 在 Android 手机上滚动不起作用

javascript - 获取 <p> 标签上的选定文本

javascript - NodeJs : Extract data from particular tag from body of response

javascript - 选择自动完成建议后如何停止页面重新加载