关于限制JavaScript全局变量

时间:2012-01-11 01:42:04

标签: javascript

我正在读一本书,鼓励读者出于几个原因,限制全局变量。他们推荐的技术是定义一个全局对象变量,如下所示:

var myapp = {}; 

var myapp.another_stooge = { 
  'first-name': 'Lenny',
  'last-name': 'George'
};

var myapp.properties = [ 
  'first-name',
  'last-name'
  ];  

for (i = 0; i < myapp.properties.length; i += 1) {
  document.writeln(myapp.properties[i] + ': ' + 
  myapp.another_stooge[myapp.properties[i]] + 
 '<BR/>');
}

这不会写入我的html文件,但是在不使用myapp的情况下实现,它可以工作:

var another_stooge = {
  'first-name': 'Lenny',
  'last-name': 'George'
};

var properties = [
  'first-name',
  'last-name'
];  

for (i = 0; i < properties.length; i += 1) {
  document.writeln(properties[i] + ': ' + another_stooge[properties[i]] + '<BR/>');
}

我必须错过一些简单但却无法捕捉的东西;任何方向将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:6)

var myapp = {}; 

myapp.another_stooge = { 
  'first-name': 'Lenny',
  'last-name': 'George'
};

myapp.properties = [ 
  'first-name',
  'last-name'
  ]; 

这应该有用..请注意后两个作业中的 var缺失

答案 1 :(得分:6)

您还可以通过将所有变量放入一个立即执行的函数来保持全局范围的清洁。

(function() {
    var another_stooge = {
      'first-name': 'Lenny',
      'last-name': 'George'
    };

    var properties = [
      'first-name',
      'last-name'
    ];  

    for (i = 0; i < properties.length; i += 1) {
      document.writeln(properties[i] + ': ' + another_stooge[properties[i]] + '<BR/>');
    }
})();

这导致another_stoogeproperties在此匿名函数内声明,而不是全局对象。