alias-function-closed.js (3582B)
1 function f1(a, aIs, // without default parameter 2 b=()=>62, bIs, // with default parameter 3 // before function body 4 c=(assertEq(a(), aIs), assertEq(b(), bIs), 5 ()=>63), 6 cIs) { 7 // before function declarations 8 assertEq(a(), 52); 9 assertEq(b(), 53); 10 assertEq(c(), 55); 11 12 function a() { 13 return 52; 14 } 15 function c() { 16 return 54; 17 } 18 function g() { 19 // close here 20 assertEq(a(), 52); // after function declaration 21 assertEq(b(), 53); // before function declaration 22 assertEq(c(), 55); // before last function declaration 23 } 24 // function declaration after closed 25 function b() { 26 return 53; 27 } 28 29 assertEq(a(), 52); // after function declaration 30 assertEq(b(), 53); // after function declaration 31 assertEq(c(), 55); // before last function declaration 32 33 g(); 34 c = ()=>72; 35 assertEq(c(), 72); // after assignment in body 36 h(); 37 assertEq(c(), 82); // after assignment in closed function 38 39 function h() { 40 assertEq(c(), 72); // after assignment in body 41 c = ()=>82; 42 assertEq(c(), 82); // after assignment in closed function 43 } 44 // function re-declaration after closed and assignment 45 function c() { 46 return 55; 47 } 48 } 49 f1(()=>42, 42, undefined, 62, undefined, 63); 50 f1(()=>42, 42, undefined, 62, ()=>44, 44); 51 f1(()=>42, 42, ()=>43, 43, undefined, 63); 52 f1(()=>42, 42, ()=>43, 43, ()=>44, 44); 53 54 function f2(a, aIs, 55 // call before body 56 b=(function() { assertEq(a(), aIs); })(), 57 // a inside body not accessible from defaults 58 c=function() { assertEq(a(), 42); }) { 59 function a() { 60 return 52; 61 } 62 function g() { 63 // close here 64 assertEq(a(), 52); 65 } 66 67 assertEq(a(), 52); 68 g(); 69 c(); 70 } 71 f2(()=>42, 42); 72 73 function f3(a, aIs, 74 // call before body 75 // close here 76 b=(function() { assertEq(a(), aIs); })(), 77 // a inside body not accessible from defaults 78 c=function() { assertEq(a(), 42); }) { 79 function a() { 80 return 52; 81 } 82 83 assertEq(a(), 52); 84 c(); 85 } 86 f3(()=>42, 42); 87 88 function f4(a, 89 // assignment before body 90 b=a=()=>62, 91 c=(assertEq(a(), 62)), 92 e=(assertEq(a(), 62))) { 93 function a() { 94 return 52; 95 } 96 function g() { 97 // close here 98 assertEq(a(), 52); 99 } 100 101 assertEq(a(), 52); 102 g(); 103 } 104 f4(()=>42); 105 106 function f5(a, b, c, d) { 107 // before var/function declarations 108 assertEq(a(), 52); 109 assertEq(b(), 53); 110 assertEq(c(), 54); 111 assertEq(d(), 55); 112 113 function g() { 114 // before var/function declarations, called after var declarations 115 // close here 116 assertEq(a(), 52); 117 assertEq(b(), 63); 118 assertEq(c(), 54); 119 assertEq(d(), 65); 120 } 121 122 var a, b = ()=>63; 123 var c, d = ()=>65; 124 125 // after var declarations, before function declarations 126 assertEq(a(), 52); 127 assertEq(b(), 63); 128 assertEq(c(), 54); 129 assertEq(d(), 65); 130 131 function h() { 132 // after var declarations, before function declarations 133 assertEq(a(), 52); 134 assertEq(b(), 63); 135 assertEq(c(), 54); 136 assertEq(d(), 65); 137 } 138 function a() { 139 return 52; 140 } 141 function b() { 142 return 53; 143 } 144 function c() { 145 return 54; 146 } 147 function d() { 148 return 55; 149 } 150 function i() { 151 // after var/function declarations 152 assertEq(a(), 52); 153 assertEq(b(), 63); 154 assertEq(c(), 54); 155 assertEq(d(), 65); 156 } 157 158 // after var/function declarations 159 assertEq(a(), 52); 160 assertEq(b(), 63); 161 assertEq(c(), 54); 162 assertEq(d(), 65); 163 g(); 164 h(); 165 i(); 166 } 167 f5(()=>42, ()=>43, ()=>44, ()=>45);