GOOD 何时在JavaScript中声明全局变量?关于全局变量的典型建议包括:
我有时会遇到这样的情况:变量的值在用户活动期间是可用的。例如,知道哪个页面处于打开状态。另一种情况是,当一个漫长的过程具有许多较小的功能时,但在整个过程中需要保持一些价值。不是将参数从函数传递到函数,而是希望它不会混淆,只需创建一个全局变量。
在我看来,要求是:
var dc = document;
var isTheMenuDisplayed = dc.getElementById('MainMenu').style.display;
当前显示的页面:
/* The state of what page is currently display, must be available to
the entire application at all times.
Variable is declared outside of a function enclosure.
*/
var whichPageDisplayed = '';
function changePage(pageNameToOpen) {
if (whichPageDisplayed === 'home') {
close the home page;
open the new page;
//Make sure to record what the new current open page is
whichPageDisplayed = pageNameToOpen;
};
我正在寻找有关何时 GOOD 使用全局变量的原因。
如果全局变量总是被认为是坏的,那么如何在没有全局变量的情况下处理上述两种情况呢?
"全局变量的异步使用可能会导致并发问题"理由不应该是全局变量的专有。异步使用任何东西都可能导致并发问题,所以我不知道这是一个反对全局变量的参数。
"很容易忘记你宣布了全局变量,因为它是你正在处理的当前代码的网站之外"理由似乎是一个编码学科问题。如果我看到在该部分代码中找不到任何var = thisVar
语句,我会自己思考,"也许我将其声明为全局变量?"。然后我会进行搜索以找到它。
"跟踪和调试全局变量很难"我有一个"搜索所有文件"我的代码编辑器中的选项。它搜索所有文件,并向我显示搜索找到匹配的每行代码。这并不难。根据我使用的浏览器和开发人员工具,错误消息可能会向我显示错误来自的确切代码行。
答案 0 :(得分:2)
减少整体代码大小并不是一个正当理由。 Minifiers将击倒它。此外,如果您有类似dc.getElementById('MainMenu').style.display
的示例,则需要方法来帮助您。例如getDisplayStyle('MainMenu')
。这样做只是一种很好的做法,因为它可以让你将逻辑保持在一个位置。
保存状态也不是一个有效的理由。将代码保存在模块中。例如,您的代码变成了一些更好的":
PageState = {
changePage: function (pageNameToOpen) {
if(this._currentPage == 'home') {
/*******/
}
this._currentPage = pageNameToOpen;
},
getCurrentPage: function () {
return this._currentPage;
}
};
PageState.changePage(pageNameToOpen);
您应该考虑全局变量的唯一情况是库是否需要它,或者您是否需要在此之前设置配置选项"某些事情"存在(并且您没有使用AMD类型模块)。例如,其中一个流行的WYSIWYG编辑器专门针对定义一些常量设置的全局变量。
基本上,对于几乎所有可能的全局变量用法,都有一个反对论证,可以将它包装在某种模块中。