JavaScript 正则表达式 lastIndex 属性在函数内的行为解析

作者:闭包旅人

时间:2026-10-23

浏览:256

本文探讨 JavaScript 中正则表达式 lastIndex 属性在函数内部重复声明时的行为。通过代码示例发现,尽管在函数内重新声明了带有全局标志(g)的正则表达式,但其 lastIndex 属性似乎保留了上一次调用的状态。文章分析了这一现象背后的机制,指出这通常与正则表达式对象的复用或引擎内部状态管理有关,而非简单的变量作用域问题。

文章目录

代码示例与预期差异

观察以下代码片段:


function test(s){


var reg = /./g;


console.log(reg.exec(s));


console.log(reg.lastIndex);


var reg = /./g;


console.log(reg.exec(s));


console.log(reg.lastIndex);


}

test("abcd");


test("efgh");


实际输出结果分析

预期中,每次调用时 lastIndex 的值都应为 1,但实际输出结果如下:


a


1


a


1


f


2


f


2


现象解释与疑问

这种现象让人联想到,在第二次调用 test 函数时,第 2 行和第 6 行的正则表达式声明似乎并未创建全新的实例,而是复用了之前的对象,导致 lastIndex 属性(值为 1)得以保留。这一行为与常规的变量作用域预期不符,令人困惑。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章