// The LHS of a for-loop is not bound to a particular scope until after the .next() method returns. | |
var obj = {}; | |
// Test 1 | |
function g() { | |
obj.x = 0; | |
yield 1; | |
} | |
var x = 2, n = 0; | |
with (obj) { | |
for (x of g()) // g().next() inserts a binding for x on obj | |
n++; | |
} | |
assertEq(x, 2); | |
assertEq(obj.x, 1); | |
assertEq(n, 1); | |
// Test 2 | |
function h() { | |
delete obj.x; | |
yield 3; | |
} | |
n = 0; | |
with (obj) { | |
for (x of h()) // h().next() deletes the binding for x on obj | |
n++; | |
} | |
assertEq(x, 3); | |
assertEq("x" in obj, false); | |
assertEq(n, 1); |