defaults-scoping.js (764B)
1 load(libdir + "asserts.js"); 2 3 var x = 'global'; 4 function f(a=x) { // global variable x 5 var x = 'local'; 6 return a; 7 } 8 assertEq(f(), 'global'); 9 10 var i = 42; 11 function g(f=function () { return ++i; }) { // closes on global variable i 12 var i = 0; 13 return f; 14 } 15 var gf = g(); 16 assertEq(gf(), 43); 17 assertEq(gf(), 44); 18 gf = g(); 19 assertEq(gf(), 45); 20 21 function h(f=function (s) { return eval(s); }) { // closes on global scope 22 var x = 'hlocal'; 23 return f; 24 } 25 var hf = h(); 26 assertEq(hf('x'), 'global'); 27 assertEq(hf('f'), hf); 28 assertEq(hf('var x = 3; x'), 3); 29 30 function j(expr, v=eval(expr)) { 31 return v; 32 } 33 assertEq(j("expr"), "expr"); 34 assertThrowsInstanceOf(() => j("v"), ReferenceError); 35 assertEq(j("Array"), Array); 36 assertEq(j("arguments").length, 1);