var arr = []; function f() {} function g(n, h) { var a = f; if (n <= 0) return f; var t = g(n - 1, h); var r = function(x) { if (x) return a; return a(h(function() { return t(); })); }; arr.push(r); return r; } g(80, f); g(80, f); g(80, f); for (var i = 0; i < arr.length; i++) assertEq(arr[i](1), f);