var的最佳用法

时间:2013-06-09 08:10:22

标签: javascript design-patterns

我经常最终做这样的事情:

var IDs = getArrayOfIDs();

IDs.forEach(function(ID){
    var object = myObjects[ID];
    // do stuff with object
});

据我了解,这会为object数组中的每个ID创建一个名为IDs的私有变量。细

但我也可以这样做:

var IDs = Obj.getArray();
var object;

IDs.forEach(function(ID){
    object = myObjects[ID];
    // do stuff with object
});

现在我在父函数中使用了一个全局变量。有了,我不需要为每个ID创建一个新变量。

这是一个真正的优势(让我说我有一个非常大的阵列)或一般的坏主意吗?

2 个答案:

答案 0 :(得分:6)

做什么是有意义的并且没有可能将代码拧到有问题的变量范围。如果object仅在回调中使用,则在回调中创建它并将其范围限制为它。如果您不在室外需要,请不要在室外使用。按照你的逻辑,你将处理所有全局变量,这当然不是一个好主意。

  

由此:我不需要为每个ID创建一个新变量。

而你并不实际创建"一个新变量"。您的代码中只有var object一次;那个一个变量。这个变量可以被重建/重写多次,但是它是一个逻辑变量。让Javascript引擎担心性能优化,除非你有一个非常明确的指示,即某些东西是实际的性能问题。

答案 1 :(得分:2)

您在优化什么?

缺点是:

  • 进一步查看变量的作用域堆栈比查找局部变量要慢一点
  • 因为变量将被共享,如果你需要在循环闭包内的函数中使用它,你可能会遇到一些问题
  • 如果变量的寿命不长于你所看到的变量,那么它将立即被垃圾收集。

此外,根据对象条目包含的内容,您可能只是创建对变量的引用。