MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1// Test that window/globalThis remain global inside functions
2
3console.log("=== Global Scope ===");
4globalThis.globalVar = "I am global";
5console.log("globalThis.globalVar:", globalThis.globalVar);
6
7console.log("\n=== Inside Regular Function ===");
8function testRegularFunc() {
9 console.log("Inside function, globalThis.globalVar:", globalThis.globalVar);
10 console.log("Inside function, window.globalVar:", window.globalVar);
11
12 // Set a new property from inside the function
13 window.fromFunction = "set from inside function";
14 globalThis.alsoFromFunction = "also from inside";
15
16 // Test that window/globalThis are the same
17 console.log("Inside function, window === globalThis:", window === globalThis);
18}
19
20testRegularFunc();
21console.log("After function, window.fromFunction:", window.fromFunction);
22console.log("After function, globalThis.alsoFromFunction:", globalThis.alsoFromFunction);
23
24console.log("\n=== Inside Arrow Function ===");
25const testArrowFunc = () => {
26 console.log("Arrow function, globalThis.globalVar:", globalThis.globalVar);
27 console.log("Arrow function, window.globalVar:", window.globalVar);
28 window.fromArrow = "from arrow function";
29};
30
31testArrowFunc();
32console.log("After arrow, window.fromArrow:", window.fromArrow);
33
34console.log("\n=== Inside Nested Function ===");
35function outer() {
36 console.log("Outer function, globalThis.globalVar:", globalThis.globalVar);
37
38 function inner() {
39 console.log("Inner function, globalThis.globalVar:", globalThis.globalVar);
40 console.log("Inner function, window.globalVar:", window.globalVar);
41 window.fromNested = "from nested function";
42 }
43
44 inner();
45}
46
47outer();
48console.log("After nested, window.fromNested:", window.fromNested);
49
50console.log("\n=== Inside Constructor ===");
51function MyClass() {
52 console.log("Constructor, globalThis.globalVar:", globalThis.globalVar);
53 console.log("Constructor, window.globalVar:", window.globalVar);
54 console.log("Constructor, this === window:", this === window);
55 console.log("Constructor, this === globalThis:", this === globalThis);
56 window.fromConstructor = "from constructor";
57}
58
59new MyClass();
60console.log("After constructor, window.fromConstructor:", window.fromConstructor);
61
62console.log("\n=== Inside Method ===");
63const obj = {
64 method: function() {
65 console.log("Method, globalThis.globalVar:", globalThis.globalVar);
66 console.log("Method, window.globalVar:", window.globalVar);
67 console.log("Method, this === window:", this === window);
68 console.log("Method, this === globalThis:", this === globalThis);
69 window.fromMethod = "from method";
70 }
71};
72
73obj.method();
74console.log("After method, window.fromMethod:", window.fromMethod);
75
76console.log("\n=== All tests passed! ===");