JavaScript 正则表达式 lastIndex 属性在函数内的行为解析
作者:闭包旅人时间:2026-10-23 11:32:27浏览:257
本文探讨 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)得以保留。这一行为与常规的变量作用域预期不符,令人困惑。
作者最新文章
怎么用 Promise 封装 JavaScript sleep 函数实现异步延时
2026-11-05 17:49:14
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
