Javascript 闭包,相同的参数,但打印出不同的答案

标签 javascript

当我运行 console.log(action(8)) 两次时,为什么它给出的答案是 1108 和 2108? 不应该是1108和1108吗?

var counter = 100;   //line 1

function make(){
    var local = 1000;
    return function(x){
        temp = local;
        local *= 2;
        return x + counter + temp;
    }
}

var action = make();

console.log(action(8)); // 1108
console.log(action(8)); // 2108

最佳答案

不,因为 local 每次调用时都会发生变化。

闭包的重点是捕获外部函数中的变量。

关于Javascript 闭包,相同的参数,但打印出不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133326/

相关文章:

javascript - 滚动事件上的jquery动画

javascript - 在 vue.js 应用程序中使用浏览器后退/前进按钮

javascript - jQueryUI 模态添加功能到默认值

javascript - 如何从 JSON 文件中的属性在 Vue.js 中生成唯一 ID?

javascript - 关于此 JSON 的路径语法

javascript - 在 JavaScript 中检查一个数组是否包含另一个数组中带有 null 的元素

javascript - 重绘 Canvas html5而不闪烁

javascript - grunt-contrib-compass 的 css 路径中的通配符选择器

javascript - 使用 select2 设置 <select> 的样式

javascript - 如何在没有显示的 div 上添加 css 悬停延迟?