Javascript:自调用单例函数与创建函数实例?

标签 javascript revealing-module-pattern

在 javascript 中揭示模块化模式时,哪一个更好地实现:

  1. 有一个自调用函数,它会在 JS 渲染时初始化一次,如下所示:

<div id="output">
</div>

<script>
   var calculator = function()
{
        add = function(x,y){
           return x+y;
        };        
        return { add:add };
}();

document.getElementById("output").innerHTML = calculator.add(5,3);;


</script>
---- 或 -----

  • 有一个构造函数可以执行以下操作:
  • <div id="output">
    </div>
    
    <script>
      var calculator = function()
      {
            add = function(x,y){
                 return x+y;
              };
              return { add:add };
      };
        document.getElementById("output").innerHTML = new calculator().add(5,3); 
    </script>

    在第一个中,我读到的好处是每个函数只会初始化一次,而在第二个中,我们将为每个初始化的对象拥有函数的副本。

    但是第一个的问题是它会在 JS 加载期间做一些工作来制作单个副本。

    我很困惑为什么在 case2 中我们会在内存中拥有多个函数副本,因为内存应该分配给变量而不是函数。

    这两种方法哪一种是正确的以及如何决定何时选择哪一种?

    最佳答案

    3)一个简单的js对象? :

    var calculator = {
      add(a,b){
       return a+b;
      }
    };
    
    alert(calculator.add(1,2))
    

    由于您既不需要多个实例(第二种方法适合),并且没有私有(private)变量(闭包适合),则上层可能是最佳选择。

    关于Javascript:自调用单例函数与创建函数实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662175/

    相关文章:

    javascript - NEXT JS - 应用程序通过重写呈现两次

    javascript - 如何限制用户仅从 google API 响应中选择城市

    javascript - 是否可以将 Revealing Module Pattern 实例传递给回调函数?

    javascript - 在揭示模块模式中从模块函数显式访问模块 var

    javascript - 如何在揭示原型(prototype)模式中命名对象?

    javascript 日期加上一些天的问题

    javascript - 将 slider 的下一张和上一张按钮更改为下一张或上一张图片的预览

    javascript - 使用 ES6 箭头函数 Babelifying JavaScript 模块模式

    javascript - 正确使用 RequireJS、Coffeescript 和 Revealing Module Pattern

    javascript - Redux 商店帮助 : Students and Schools