【问题标题】:Best practice to avoid global vars in Node?避免在 Node 中使用全局变量的最佳实践?
【发布时间】:2016-07-23 09:13:55
【问题描述】:

使用节点。

试图避免全局变量,但我需要在两个未嵌套的函数之间共享一个变量(整数)。这两个函数都直接在全局范围内声明。

对于我想要完成的事情,这样的事情是否被认为是一种好习惯?如果没有,是否有更好的模式可以遵循?

function doStuffWithDataFromEventListener(){           
    var a = inner2().num;
}();

var fakeListener = function(){ //make believe event listener that is only called once.
   var num = 7;
   return {num: num};
};

【问题讨论】:

  • 为什么不直接return 7
  • 调用函数以返回值并不能解决您的全局问题,因为您仍然拥有globalNum,如果您刚刚执行var globalNum = 7;,您将拥有它。您可以将代码包装在 IIFE 中,然后不会泄漏到全局。
  • @elclanrs 我的印象是对象作为引用返回,而基元作为值返回,
  • @Andy 我明白你的意思,我的例子没有解决任何问题。我正在使用节点。稍后会更新示例,因为我事后意识到它太模糊了
  • @cheestherapy:实际上在节点中你几乎没有全局变量;在一个模块中声明的所有顶级变量都在该模块自己的范围内 - 并且可以很好地使用。

标签: javascript scope global


【解决方案1】:

使用模块模式:

 // Global scope

 (function(){

    // Function (module) scope

    var x = 5;  // Module level (not global) variable


    function a(){
         return ++x;
    }

    function b(){
         return ++x;
    }

    a();  // 6
    b();  // 7

 }());

【讨论】:

    【解决方案2】:

    有几种方法可以控制/防止全局变量,即创建一个闭包函数并将所有代码放入其中。所有代码都将作为匿名函数存在于 DOM 中。您还可以为该函数命名,以便更容易测试。您还可以创建一个全局对象并将所有方法、变量和属性附加到该对象上。我相信你以前见过这个。

    var myAppObj = myAppObj || {};
    myAppObj.name = "tommy";
    MyAppObj.odStuffFunc = function() {
          // do stuff
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      相关资源
      最近更新 更多