1

我经常做这样的事情:

var IDs = getArrayOfIDs();

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

据我了解,这会为我的数组object中的每个创建一个私有变量。美好的。IDIDs

但我也可以这样做:

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

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

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

这是一个实际的优势(假设我有一个非常大的数组)还是一个坏主意?

4

2 回答 2

6

做最有意义的事情,并且不可能用有问题的变量范围来搞砸你的代码。如果object仅在回调内部使用,则在回调内部创建它并限制其范围。如果你不需要它在外面,不要让它在外面可用。根据您的逻辑,您将使用所有全局变量,这当然不是一个好主意。

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

而且您实际上并没有创建“新变量”。您的代码中只有var object一次;这是一个变量。此变量可能会被重新创建/覆盖多次,但它是一个逻辑变量。让 Javascript 引擎担心性能优化,除非您有一个非常明确的指标表明某些事情是实际的性能问题。

于 2013-06-09T08:16:52.060 回答
2

你在优化什么?

缺点是:

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

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

于 2013-06-09T08:15:49.107 回答