semantics-09.js (503B)
1 // The LHS of a for-of loop is not evaluated until after the .next() method returns. 2 3 var s; 4 function f() { 5 s += 'f'; 6 return {}; 7 } 8 9 // Test 1: .next() throws StopIteration right away. f is never called. 10 s = ''; 11 for (f().x of []) 12 s += '.'; 13 assertEq(s, ''); 14 15 // Test 2: check proper interleaving of f calls, iterator.next() calls, and the loop body. 16 function* g() { 17 s += 'g'; 18 yield 0; 19 s += 'g'; 20 yield 1; 21 s += 'g'; 22 } 23 for (f().x of g()) 24 s += '.'; 25 assertEq(s, 'gf.gf.g');