代码之家  ›  专栏  ›  技术社区  ›  Deadpool

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

  •  0
  • Deadpool  · 技术社区  · 10 年前

    在这个简单的例子中,我想演示:

    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 回复  |  直到 10 年前
        1
  •  2
  •   Barmar    10 年前

    你没有打电话给 box 作用你需要把 () 之后再调用它。

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

    但这并不是真正的模块模式。对于模块,将变量设置为 IIFE 返回对象的。

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