Program (script) @1:1 └─ FunctionDeclaration "expressions" @1:1 ├─ parameters │ ├─ Identifier "a" [argument:0] @1:22 │ └─ Identifier "b" [argument:1] @1:22 └─ body └─ FunctionBody @2:5 ├─ VariableDeclaration (let) @2:5 │ └─ VariableDeclarator @2:5 │ ├─ Identifier "x" [variable:0] (let) @2:9 │ └─ BinaryExpression (+) @2:15 │ ├─ Identifier "a" [argument:0] @2:13 │ └─ BinaryExpression (*) @2:19 │ ├─ Identifier "b" [argument:1] @2:17 │ └─ NumericLiteral 2 @2:21 ├─ VariableDeclaration (let) @3:5 │ └─ VariableDeclarator @3:5 │ ├─ Identifier "y" [variable:1] (let) @3:9 │ └─ BinaryExpression (===) @3:22 │ ├─ UnaryExpression (typeof) @3:13 │ │ └─ Identifier "a" [argument:0] @3:20 │ └─ StringLiteral "number" @3:34 ├─ VariableDeclaration (let) @4:5 │ └─ VariableDeclarator @4:5 │ ├─ Identifier "z" [variable:2] (let) @4:9 │ └─ ConditionalExpression @4:19 │ ├─ test │ │ └─ BinaryExpression (>) @4:15 │ │ ├─ Identifier "a" [argument:0] @4:13 │ │ └─ NumericLiteral 0 @4:17 │ ├─ consequent │ │ └─ Identifier "a" [argument:0] @4:21 │ └─ alternate │ └─ UnaryExpression (-) @4:25 │ └─ Identifier "a" [argument:0] @4:26 ├─ ExpressionStatement @5:5 │ └─ UpdateExpression (++, postfix) @5:6 │ └─ Identifier "a" [argument:0] @5:5 └─ ReturnStatement @6:5 └─ BinaryExpression (+) @6:18 ├─ BinaryExpression (+) @6:14 │ ├─ Identifier "x" [variable:0] (let) @6:12 │ └─ Identifier "y" [variable:1] (let) @6:16 └─ Identifier "z" [variable:2] (let) @6:20