2

例如:

for (var idx = 0, len = lines.length; idx < len; idx += 1) {
  /^regexp?/i.test(lines[idx]);
}

以下会更有效吗?

var pattern = /^regexp?/i;
for (var idx = 0, len = lines.length; idx < len; idx += 1) {
  pattern.test(lines[idx]);
}

我的理解是,在第一种情况下,每次迭代都会创建一个新的 RegExp 对象,消耗的内存比必要的多。我的理解是否正确,或者 JavaScript 引擎是否执行了使上述示例等效的优化?

4

2 回答 2

5

缓存的正则表达式会更快。中的元素lines越多,浪费在重新创建相同的正则表达式对象上的时间就越多。

于 2013-05-10T00:12:54.257 回答
1

您的假设是正确的,创建多个对象肯定比只创建一个对象的性能要差。将正则表达式创建移出循环是一个很好的做法。即使某些引擎进行了一些优化,您也希望您的代码在每个可能的引擎中高效运行。

于 2013-05-10T00:12:37.540 回答