// Test the scope chain walk. function test1() { var x = 0; function f1(addprop) { function f2() { eval(""); function f3() { eval(""); function f4() { for (var i=0; i<100; i++) { x = x + i; } } return f4; } return f3(); } var g = f2(); g(); if (addprop) eval("var a1 = 3; var x = 33;"); g(); if (addprop) assertEq(x, 4983); return f2(); } var g = f1(true); g(); g = f1(false); eval("var y = 2020; var z = y + 3;"); g(); return x; } assertEq(test1(), 19800); // Test with non-cacheable objects on the scope chain. function test2(o) { var x = 0; with ({}) { with (o) { var f = function() { for (var i=0; i<100; i++) { x++; } }; } } f(); assertEq(o.x, 110); assertEq(x, 0); } test2({x: 10});