定义 JavaScript 变量时的最佳做法

Best practices when defining JavaScript variables

设置 dojo 应用程序时,建议的启动变量引用 dom 对象的最佳做法是什么?我发现我通常需要在小部件本身之上引用父对象和子对象,并且一直在使用以下代码创建全局占位符。

var formItems = ["Item_1", "Item_2", "Item_3", ... "Item_15"];

formItems.forEach(function(formItem) {
    var items = ["frm", "dom", "dijit"];
    items.forEach(function(item) {
        var x = item + formItem;
        window[x] = undefined;
    });
}); 

对比

var frmItem_1, frmItem_2, frmItem_3, ... frmItem_15;
var domItem_1, domItem_2, domItem_3, ... domItem_15;
var dijitItem_1, dijitItem_2, dijitItem_3, ... dijitItem_15;

在解析完所有内容之后,变量实际上稍后会填充到 dojo 应用程序中,但是在 "save",JSHint 由于没有定义实际的显式变量而变得混乱。

这都是主观的,取决于您的项目。可以配置JSHint让你开心

如果您想在不更改任何 JSHint 配置的情况下满足错误,请在循环外初始化变量,然后在循环内定义它们。

var formItems = ["Item_1", "Item_2", "Item_3", ... "Item_15"],
    items,
    x;

formItems.forEach(function(formItem) {
    items = ["frm", "dom", "dijit"];
    items.forEach(function(item) {
       x = item + formItem;
       window[x] = undefined;
    });
}); 

我不太喜欢这两个选项。我更喜欢尽可能少的全局变量。我建议初始化一个数组来存储您的项目,然后在您的 dojo 应用程序中引用该数组。

var formItems = [];
for(var i = 0; i < 15; i++) {
   formItems.push({
       frm: null,
       dom: null,
       dijit: null
   });
}

并在您的 dojo 应用程序中替换:

  • frmItem_<em>N</em>formItems[<em>N</em>].frm
  • domItem_<em>N</em>formItems[<em>N</em>].dom
  • dijitItem_<em>N</em>formItems[<em>N</em>].dijit

如果您可以让您的 dojo 应用程序根据需要将项目推送到数组中,您也可以避免预填充数组。您可以做更多的工作来使 formItems 数组成为非全局数组,但仅从提供的代码中很难判断。