Program (script) @1:1 ├─ FunctionDeclaration "var_hoisting" @1:1 │ └─ body │ └─ FunctionBody @2:5 │ ├─ ExpressionStatement @2:5 │ │ └─ AssignmentExpression (=) @2:7 │ │ ├─ Identifier "x" [variable:0] (var) @2:5 │ │ └─ NumericLiteral 1 @2:9 │ ├─ VariableDeclaration (var) @3:5 │ │ └─ VariableDeclarator @3:5 │ │ └─ Identifier "x" [variable:0] (var) @3:9 │ └─ ReturnStatement @4:5 │ └─ Identifier "x" [variable:0] (var) @4:12 ├─ FunctionDeclaration "let_in_block" @7:1 │ └─ body │ └─ FunctionBody @8:5 │ ├─ VariableDeclaration (let) @8:5 │ │ └─ VariableDeclarator @8:5 │ │ ├─ Identifier "x" [variable:1] (let) @8:9 │ │ └─ NumericLiteral 1 @8:13 │ ├─ BlockStatement @9:5 │ │ ├─ VariableDeclaration (let) @10:9 │ │ │ └─ VariableDeclarator @10:9 │ │ │ ├─ Identifier "x" [variable:0] (let) @10:13 │ │ │ └─ NumericLiteral 2 @10:17 │ │ └─ ExpressionStatement @11:9 │ │ └─ Identifier "x" [variable:0] (let) @11:9 │ └─ ReturnStatement @13:5 │ └─ Identifier "x" [variable:1] (let) @13:12 ├─ FunctionDeclaration "const_binding" @16:1 │ └─ body │ └─ FunctionBody @17:5 │ ├─ VariableDeclaration (const) @17:5 │ │ └─ VariableDeclarator @17:5 │ │ ├─ Identifier "x" [variable:0] (const) @17:11 │ │ └─ NumericLiteral 1 @17:15 │ ├─ VariableDeclaration (const) @18:5 │ │ └─ VariableDeclarator @18:5 │ │ ├─ Identifier "y" [variable:1] (const) @18:11 │ │ └─ NumericLiteral 2 @18:15 │ └─ ReturnStatement @19:5 │ └─ BinaryExpression (+) @19:14 │ ├─ Identifier "x" [variable:0] (const) @19:12 │ └─ Identifier "y" [variable:1] (const) @19:16 └─ FunctionDeclaration "for_let_scoping" @22:1 └─ body └─ FunctionBody @23:5 ├─ VariableDeclaration (let) @23:5 │ └─ VariableDeclarator @23:5 │ ├─ Identifier "sum" [variable:1] (let) @23:9 │ └─ NumericLiteral 0 @23:15 ├─ ForStatement @24:5 │ ├─ init │ │ └─ VariableDeclaration (let) @24:10 │ │ └─ VariableDeclarator @24:10 │ │ ├─ Identifier "i" [variable:0] (let) @24:14 │ │ └─ NumericLiteral 0 @24:18 │ ├─ test │ │ └─ BinaryExpression (<) @24:23 │ │ ├─ Identifier "i" [variable:0] (let) @24:21 │ │ └─ NumericLiteral 3 @24:25 │ ├─ update │ │ └─ UpdateExpression (++, postfix) @24:29 │ │ └─ Identifier "i" [variable:0] (let) @24:28 │ └─ body │ └─ BlockStatement @24:33 │ └─ ExpressionStatement @25:9 │ └─ AssignmentExpression (=) @25:13 │ ├─ Identifier "sum" [variable:1] (let) @25:9 │ └─ BinaryExpression (+) @25:19 │ ├─ Identifier "sum" [variable:1] (let) @25:15 │ └─ Identifier "i" [variable:0] (let) @25:21 └─ ReturnStatement @27:5 └─ Identifier "sum" [variable:1] (let) @27:12