tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);