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:实际上,在节点中几乎没有全局变量;在一个模块中声明为顶级的所有变量都在该模块自己的范围内,并且可以很好地使用。