javascript - 为什么这段代码有两个不同的结果?

标签 javascript

var addCount;
function s1() {
    var count = 0;
    addCount = function() {
        count++;
    };
    function s12() {
        console.log(count)
    }
    return s12
}
var result1 = s1();
var result2 = s1();
addCount();
result1(); // count = 0;
result2(); // count = 1;

In the picture I marked the puzzled place 然后,下一步将以这种方式显示 This is where I am really puzzled

最佳答案

因为 result 是一个函数,被声明为调用 s1 函数的结果。调用 s1 返回 s12 函数,该函数使用一个名为 count 的变量,该变量声明在比它自身更高的级别(作用域)(这是称为“自由变量”)。

当在生命周期比声明自由变量的函数长的函数内部使用自由变量时, "closure" 是围绕该自由变量创建的,即使在声明它的函数终止后,它仍保留在范围内。

当您第一次调用 result 时,count 会加一,并且该值会保留在内存中,因此当您第二次调用它时,您将使用最后一个值。

关于javascript - 为什么这段代码有两个不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42372688/

相关文章:

javascript - Ui-router - {slug} 和 :slug 之间的区别

javascript - 带有 bootstrap vue 的可拖动表格

javascript - 循环遍历嵌套函数中的所有文档

javascript - jQuery 看不到我的 ID

javascript - Nodejs创建一个里面有文字的PNG图像

javascript - Cesium如何将 'drape'多边形或线放到地形表面

javascript - HTML5 FileReader API 内存问题

javascript - Cytoscape.js 部分布局器

javascript - Leaflet JS 中的多个圆圈

javascript - 提交表单后删除输入字段的值属性中设置的值