Program (script) @2:1 ├─ VariableDeclaration (var) @2:1 │ └─ VariableDeclarator @2:1 │ ├─ Identifier "x" [global] (var) @2:5 │ └─ NumericLiteral 1 @2:9 ├─ FunctionDeclaration "reads_global" @4:1 │ └─ body │ └─ FunctionBody @5:5 │ └─ ReturnStatement @5:5 │ └─ Identifier "x" [global] (var) @5:12 ├─ FunctionDeclaration "shadows_with_param" @8:1 │ ├─ parameters │ │ └─ Identifier "x" [argument:0] @8:29 │ └─ body │ └─ FunctionBody @9:5 │ └─ ReturnStatement @9:5 │ └─ Identifier "x" [argument:0] @9:12 ├─ FunctionDeclaration "shadows_with_var" @12:1 │ └─ body │ └─ FunctionBody @13:5 │ ├─ VariableDeclaration (var) @13:5 │ │ └─ VariableDeclarator @13:5 │ │ ├─ Identifier "x" [variable:0] (var) @13:9 │ │ └─ NumericLiteral 2 @13:13 │ └─ ReturnStatement @14:5 │ └─ Identifier "x" [variable:0] (var) @14:12 ├─ FunctionDeclaration "shadows_with_let" @17:1 │ └─ body │ └─ FunctionBody @18:5 │ ├─ VariableDeclaration (let) @18:5 │ │ └─ VariableDeclarator @18:5 │ │ ├─ Identifier "x" [variable:0] (let) @18:9 │ │ └─ NumericLiteral 3 @18:13 │ └─ ReturnStatement @19:5 │ └─ Identifier "x" [variable:0] (let) @19:12 └─ FunctionDeclaration "outer" @23:1 ├─ parameters │ └─ Identifier "x" @23:16 └─ body └─ FunctionBody @24:5 ├─ FunctionDeclaration "inner" @24:5 │ └─ body │ └─ FunctionBody @25:9 │ └─ ReturnStatement @25:9 │ └─ Identifier "x" @25:16 └─ ReturnStatement @27:5 └─ CallExpression @27:17 └─ Identifier "inner" [variable:0] @27:12