feat: 写路径四路加函数名不可写守卫,sloppy 静默 strict 抛 TypeError

This commit is contained in:
2026-10-09 22:20:20 +00:00
parent 4f6bd5d947
commit 6ba2043599
10 changed files with 150 additions and 30 deletions
@@ -132,12 +132,13 @@ fn switch_case_function_captured_by_outer() {
#[test]
fn switch_case_function_binding_independent_of_outer_var() {
// 块绑定可变且与外层 var 独立:块内对 f 重新赋值不改写外层 var 绑定。
// 函数名不可写绑定(15.2.10.1 步 m):体内容器对 f 重新赋值静默失败(sloppy),
// 块内 f 仍为函数对象;外层 var 绑定独立,不被改写。
let src = "var r1, r2; (function(){ var initialBV, currentBV; \
switch(1){case 1: function f(){ initialBV=f; f=123; currentBV=f; return 'decl'; }} \
var varBinding=f; f(); r1 = initialBV() === 'decl'; \
r2 = currentBV === 123 && varBinding() === 'decl'; }()); r1 && r2";
assert!(eval(src).unwrap().as_bool(), "块绑定应独立于外层 var 绑定");
r2 = currentBV === f && varBinding() === 'decl'; }()); r1 && r2";
assert!(eval(src).unwrap().as_bool(), "函数名不可写绑定自引用重赋静默失败,外层 var 绑定独立");
}
#[test]