Program (script) @3:1 ├─ VariableDeclaration (var) @3:1 │ └─ VariableDeclarator @3:1 │ ├─ Identifier "g" [global] (var) @3:5 │ └─ NumericLiteral 1 @3:9 ├─ FunctionDeclaration "assign_local" @5:1 │ └─ body │ └─ FunctionBody @6:5 │ ├─ VariableDeclaration (let) @6:5 │ │ └─ VariableDeclarator @6:5 │ │ ├─ Identifier "x" [variable:0] (let) @6:9 │ │ └─ NumericLiteral 1 @6:13 │ ├─ ExpressionStatement @7:5 │ │ └─ AssignmentExpression (=) @7:7 │ │ ├─ Identifier "x" [variable:0] (let) @7:5 │ │ └─ NumericLiteral 2 @7:9 │ ├─ ExpressionStatement @8:5 │ │ └─ AssignmentExpression (+=) @8:7 │ │ ├─ Identifier "x" [variable:0] (let) @8:5 │ │ └─ NumericLiteral 3 @8:10 │ └─ ReturnStatement @9:5 │ └─ Identifier "x" [variable:0] (let) @9:12 ├─ FunctionDeclaration "assign_global" @12:1 │ └─ body │ └─ FunctionBody @13:5 │ ├─ ExpressionStatement @13:5 │ │ └─ AssignmentExpression (=) @13:7 │ │ ├─ Identifier "g" [global] (var) @13:5 │ │ └─ NumericLiteral 2 @13:9 │ ├─ ExpressionStatement @14:5 │ │ └─ AssignmentExpression (+=) @14:7 │ │ ├─ Identifier "g" [global] (var) @14:5 │ │ └─ NumericLiteral 3 @14:10 │ └─ ReturnStatement @15:5 │ └─ Identifier "g" [global] (var) @15:12 ├─ FunctionDeclaration "destruct_assign" @19:1 │ └─ body │ └─ FunctionBody @20:5 │ ├─ VariableDeclaration (let) @20:5 │ │ ├─ VariableDeclarator @20:5 │ │ │ └─ Identifier "a" [variable:0] (let) @20:9 │ │ └─ VariableDeclarator @20:5 │ │ └─ Identifier "b" [variable:1] (let) @20:12 │ ├─ ExpressionStatement @21:5 │ │ └─ AssignmentExpression (=) @21:12 │ │ ├─ BindingPattern (array) │ │ │ ├─ entry │ │ │ │ └─ alias │ │ │ │ └─ Identifier "a" [variable:0] (let) @21:6 │ │ │ └─ entry │ │ │ └─ alias │ │ │ └─ Identifier "b" [variable:1] (let) @21:9 │ │ └─ ArrayExpression @21:14 │ │ ├─ NumericLiteral 1 @21:15 │ │ └─ NumericLiteral 2 @21:18 │ └─ ReturnStatement @22:5 │ └─ BinaryExpression (+) @22:14 │ ├─ Identifier "a" [variable:0] (let) @22:12 │ └─ Identifier "b" [variable:1] (let) @22:16 ├─ FunctionDeclaration "assign_undeclared" @26:1 │ └─ body │ └─ FunctionBody @27:5 │ ├─ ExpressionStatement @27:5 │ │ └─ AssignmentExpression (=) @27:16 │ │ ├─ Identifier "undeclared" [global] @27:5 │ │ └─ NumericLiteral 1 @27:18 │ └─ ReturnStatement @28:5 │ └─ Identifier "undeclared" [global] @28:12 └─ FunctionDeclaration "update_targets" @32:1 └─ body └─ FunctionBody @33:5 ├─ VariableDeclaration (let) @33:5 │ └─ VariableDeclarator @33:5 │ ├─ Identifier "x" [variable:0] (let) @33:9 │ └─ NumericLiteral 0 @33:13 ├─ ExpressionStatement @34:5 │ └─ UpdateExpression (++, postfix) @34:6 │ └─ Identifier "x" [variable:0] (let) @34:5 ├─ ExpressionStatement @35:5 │ └─ UpdateExpression (++, prefix) @35:5 │ └─ Identifier "x" [variable:0] (let) @35:7 ├─ ExpressionStatement @36:5 │ └─ UpdateExpression (--, postfix) @36:6 │ └─ Identifier "x" [variable:0] (let) @36:5 ├─ ExpressionStatement @37:5 │ └─ UpdateExpression (--, prefix) @37:5 │ └─ Identifier "x" [variable:0] (let) @37:7 └─ ReturnStatement @38:5 └─ Identifier "x" [variable:0] (let) @38:12