// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Flags: --harmony-scoping 'use strict'; // Top-level code let s = 0; let f = [undefined, undefined, undefined] for (const x of [1,2,3]) { s += x; f[x-1] = function() { return x; } } assertEquals(6, s); assertEquals(1, f[0]()); assertEquals(2, f[1]()); assertEquals(3, f[2]()); let x = 1; s = 0; for (const x of [x, x+1, x+2]) { s += x; } assertEquals(6, s); s = 0; var q = 1; for (const q of [q, q+1, q+2]) { s += q; } assertEquals(6, s); let z = 1; s = 0; for (const x = 1; z < 2; z++) { s += x + z; } assertEquals(2, s); s = ""; for (const x in [1,2,3]) { s += x; } assertEquals("012", s); assertThrows("'use strict'; for (const x in [1,2,3]) { x++ }", TypeError); // Function scope (function() { let s = 0; for (const x of [1,2,3]) { s += x; } assertEquals(6, s); let x = 1; s = 0; for (const x of [x, x+1, x+2]) { s += x; } assertEquals(6, s); s = 0; var q = 1; for (const q of [q, q+1, q+2]) { s += q; } assertEquals(6, s); s = ""; for (const x in [1,2,3]) { s += x; } assertEquals("012", s); }());