Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免节点中全局变量的最佳实践?_Javascript_Scope_Global - Fatal编程技术网

Javascript 避免节点中全局变量的最佳实践?

Javascript 避免节点中全局变量的最佳实践?,javascript,scope,global,Javascript,Scope,Global,使用节点 试图避免全局变量,但我需要在两个未嵌套的函数之间共享一个变量(整数)。这两个函数都直接在全局范围下声明 对于我想要完成的事情来说,这样的事情被认为是一种很好的实践吗?如果没有,是否有更好的模式可以遵循 function doStuffWithDataFromEventListener(){ var a = inner2().num; }(); var fakeListener = function(){ //make believe event list

使用节点

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

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

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

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

使用模块模式:

 // 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

 }());

使用模块模式:

 // 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

 }());

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

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

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

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

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