Program (script) @1:1 ├─ FunctionDeclaration "uses_arrow" @1:1 │ └─ body │ └─ FunctionBody @2:5 │ ├─ VariableDeclaration (let) @2:5 │ │ └─ VariableDeclarator @2:5 │ │ ├─ Identifier "x" (let) @2:9 │ │ └─ NumericLiteral 1 @2:13 │ ├─ VariableDeclaration (const) @3:5 │ │ └─ VariableDeclarator @3:5 │ │ ├─ Identifier "f" [variable:0] (const) @3:11 │ │ └─ FunctionExpression "" [arrow] @3:15 │ │ ├─ parameters │ │ │ └─ Identifier "y" [argument:0] @3:15 │ │ └─ body │ │ └─ FunctionBody @3:15 │ │ └─ ReturnStatement @3:15 │ │ └─ BinaryExpression (+) @3:22 │ │ ├─ Identifier "x" (let) @3:20 │ │ └─ Identifier "y" [argument:0] @3:24 │ └─ ReturnStatement @4:5 │ └─ CallExpression @4:13 │ ├─ Identifier "f" [variable:0] (const) @4:12 │ └─ NumericLiteral 2 @4:14 ├─ FunctionDeclaration "arrow_with_this" [uses-this] [uses-this-from-environment] @7:1 │ └─ body │ └─ FunctionBody @8:5 │ ├─ VariableDeclaration (const) @8:5 │ │ └─ VariableDeclarator @8:5 │ │ ├─ Identifier "f" [variable:0] (const) @8:11 │ │ └─ FunctionExpression "" [arrow] [uses-this-from-environment] @8:15 │ │ └─ body │ │ └─ FunctionBody @8:15 │ │ └─ ReturnStatement @8:15 │ │ └─ ThisExpression @8:21 │ └─ ReturnStatement @9:5 │ └─ CallExpression @9:13 │ └─ Identifier "f" [variable:0] (const) @9:12 └─ VariableDeclaration (const) @12:1 └─ VariableDeclarator @12:1 ├─ Identifier "top_level_arrow" [global] (const) @12:7 └─ FunctionExpression "" [arrow] @12:25 ├─ parameters │ ├─ Identifier "a" [argument:0] @12:26 │ └─ Identifier "b" [argument:1] @12:26 └─ body └─ FunctionBody @12:25 └─ ReturnStatement @12:25 └─ BinaryExpression (+) @12:37 ├─ Identifier "a" [argument:0] @12:35 └─ Identifier "b" [argument:1] @12:39