Bug 238149

Summary: Variable in top level block scope is incorrectly captured
Product: WebKit Reporter: neildhar
Component: JavaScriptCoreAssignee: Nobody <webkit-unassigned>
Status: RESOLVED WORKSFORME    
Severity: Normal CC: jarred, saam, webkit-bug-importer, ysuzuki
Priority: P2 Keywords: InRadar
Version: Safari 15   
Hardware: Unspecified   
OS: Unspecified   

neildhar
Reported 2022-03-21 12:02:05 PDT
For the following snippet placed at the top level: do { let w = "banana"; function foo(){ w = "bar"; } foo(); console.log(w); } while(0) JSC prints "banana", instead of "bar".
Attachments
Radar WebKit Bug Importer
Comment 1 2022-03-22 09:07:31 PDT
Jarred Sumner
Comment 2 2022-05-22 02:35:05 PDT
This seems to only happen when strict mode is off. The following code doesn't reproduce the issue in jsc shell: "use strict"; do { let w = "banana"; function foo() { w = "bar"; } foo(); print(w); } while (0); But this code does: do { let w = "banana"; function foo() { w = "bar"; } foo(); print(w); } while (0);
uncomment
Comment 3 2024-02-24 00:55:46 PST
The variable is not even visible within the function: do { let w = "banana"; function foo(){ console.log(w); } foo(); } while(0) Result (unexpected): ReferenceError: Can't find variable: w Unlike with arrow function: do { let w = "banana"; foo=()=>{ console.log(w); }; foo(); } while(0) Result (as expected): banana
Yusuke Suzuki
Comment 4 2025-05-23 17:22:24 PDT
Now function declaration with the scope is implemented (instead of function statement). So it is fixed.
Note You need to log in before you can comment on or make changes to this bug.