semantics-10.js (558B)
1 // The LHS of a for-loop is not bound to a particular scope until after the .next() method returns. 2 3 var obj = {}; 4 5 // Test 1 6 function* g() { 7 obj.x = 0; 8 yield 1; 9 } 10 var x = 2, n = 0; 11 with (obj) { 12 for (x of g()) // g().next() inserts a binding for x on obj 13 n++; 14 } 15 assertEq(x, 2); 16 assertEq(obj.x, 1); 17 assertEq(n, 1); 18 19 // Test 2 20 function* h() { 21 delete obj.x; 22 yield 3; 23 } 24 n = 0; 25 with (obj) { 26 for (x of h()) // h().next() deletes the binding for x on obj 27 n++; 28 } 29 assertEq(x, 3); 30 assertEq("x" in obj, false); 31 assertEq(n, 1);