Source code
Revision control
Copy as Markdown
Other Tools
// 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);