From 1da9c98e629d41ee97d934a6af1aca0b03e9f1c2 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 16 Aug 2026 13:32:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20for-in/for-of=20=E5=A4=B4=E5=90=8D?= =?UTF-8?q?=E4=BB=85=20var=20=E6=8F=90=E5=8D=87=E5=85=A5=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=90=8D=E5=8D=95=EF=BC=8C=E6=8E=92?= =?UTF-8?q?=E9=99=A4=20let/const?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_emit/src/closure.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/oxide_emit/src/closure.rs b/crates/oxide_emit/src/closure.rs index c01fe47..bce1a45 100644 --- a/crates/oxide_emit/src/closure.rs +++ b/crates/oxide_emit/src/closure.rs @@ -101,14 +101,20 @@ impl Emitter { self.collect_var_names_stmt(std::slice::from_ref(&f.body), out); } Statement::ForInStatement(fi) => { - if let oxide_parser::ForStatementLeft::VariableDeclaration(_) = &fi.left { - self.collect_for_left_decl_names(&fi.left, out); + if let oxide_parser::ForStatementLeft::VariableDeclaration(vd) = &fi.left { + // 仅 var 头名提升到函数作用域,let/const 头名是迭代级绑定。 + if matches!(vd.kind, VariableDeclarationKind::Var) { + self.collect_for_left_decl_names(&fi.left, out); + } } self.collect_var_names_stmt(std::slice::from_ref(&fi.body), out); } Statement::ForOfStatement(fo) => { - if let oxide_parser::ForStatementLeft::VariableDeclaration(_) = &fo.left { - self.collect_for_left_decl_names(&fo.left, out); + if let oxide_parser::ForStatementLeft::VariableDeclaration(vd) = &fo.left { + // 仅 var 头名提升到函数作用域,let/const 头名是迭代级绑定。 + if matches!(vd.kind, VariableDeclarationKind::Var) { + self.collect_for_left_decl_names(&fo.left, out); + } } self.collect_var_names_stmt(std::slice::from_ref(&fo.body), out); }