function direct() { return arguments; } function scoped(a) { if (!effectful42()) return function() { return a; } return arguments; } function foo(a) { try { return a[0]; } catch (e) { return -23; } } for (var i = 0; i < 100; ++i) { var result = foo(scoped(42)); if (result != 42) throw "Error: bad result: " + result; } for (var i = 0; i < 100; ++i) { var result = foo(direct(42)); if (result != 42) throw "Error: bad result: " + result; }