模块模式中的简单闭包示例不起作用

时间:2016-09-01 05:28:25

标签: javascript function design-patterns closures

在我想要演示的简单示例中:

1. Module Pattern
2. Closure 

我试图通过使用闭包来更改局部变量的值。但是,我无法实现它(在控制台中输出必须为15)。

HTML

<script>
function box(){
    var a;
    a=10;

    var obj = {};
    obj.func1 = function(b){
        a = a+b;
        console.log(a);
    }
    return obj;
}

box.func1(5);
</script>

请在示例中帮助我。

  

另外,在这个简单的例子中,告诉我是否错过了模块模式关键组件

1 个答案:

答案 0 :(得分:2)

您没有调用box功能。您需要在其后面加()来调用它。

&#13;
&#13;
function box(){
    var a;
    a=10;

    var obj = {};
    obj.func1 = function(b){
        a = a+b;
        console.log(a);
    }
    return obj;
}

box().func1(5);
&#13;
&#13;
&#13;

但那不是模块模式。对于模块,将变量设置为返回对象的IIFE的结果。

&#13;
&#13;
var Box = (function(){
    var a;
    a=10;

    var obj = {};
    obj.func1 = function(b){
        a = a+b;
        console.log(a);
    }
    return obj;
})();

Box.func1(5);
&#13;
&#13;
&#13;