在循环中使用JavaScript regexp文字会消耗不必要的内存吗?

时间:2013-05-10 00:09:56

标签: javascript performance javascript-objects

例如:

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引擎是否执行优化以使上述示例等效?

2 个答案:

答案 0 :(得分:5)

缓存的正则表达式will be fasterlines中的元素越多,浪费的时间就越多,重新创建相同的正则表达式对象。

答案 1 :(得分:1)

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