Program (script) @3:1
├─ FunctionDeclaration "outer" @3:1
│  └─ body
│     └─ FunctionBody @4:5
│        ├─ VariableDeclaration (let) @4:5
│        │  └─ VariableDeclarator @4:5
│        │     ├─ Identifier "captured" (let) @4:9
│        │     └─ NumericLiteral 1 @4:20
│        ├─ VariableDeclaration (let) @5:5
│        │  └─ VariableDeclarator @5:5
│        │     ├─ Identifier "not_captured" [variable:0] (let) @5:9
│        │     └─ NumericLiteral 2 @5:24
│        ├─ FunctionDeclaration "inner" @6:5
│        │  └─ body
│        │     └─ FunctionBody @7:9
│        │        └─ ReturnStatement @7:9
│        │           └─ Identifier "captured" (let) @7:16
│        └─ ReturnStatement @9:5
│           └─ BinaryExpression (+) @9:20
│              ├─ CallExpression @9:17
│              │  └─ Identifier "inner" [variable:1] @9:12
│              └─ Identifier "not_captured" [variable:0] (let) @9:22
├─ FunctionDeclaration "level0" @13:1
│  └─ body
│     └─ FunctionBody @14:5
│        ├─ VariableDeclaration (let) @14:5
│        │  └─ VariableDeclarator @14:5
│        │     ├─ Identifier "a" (let) @14:9
│        │     └─ NumericLiteral 1 @14:13
│        ├─ FunctionDeclaration "level1" @15:5
│        │  └─ body
│        │     └─ FunctionBody @16:9
│        │        ├─ VariableDeclaration (let) @16:9
│        │        │  └─ VariableDeclarator @16:9
│        │        │     ├─ Identifier "b" (let) @16:13
│        │        │     └─ NumericLiteral 2 @16:17
│        │        ├─ FunctionDeclaration "level2" @17:9
│        │        │  └─ body
│        │        │     └─ FunctionBody @18:13
│        │        │        └─ ReturnStatement @18:13
│        │        │           └─ BinaryExpression (+) @18:22
│        │        │              ├─ Identifier "a" (let) @18:20
│        │        │              └─ Identifier "b" (let) @18:24
│        │        └─ ReturnStatement @20:9
│        │           └─ CallExpression @20:22
│        │              └─ Identifier "level2" [variable:0] @20:16
│        └─ ReturnStatement @22:5
│           └─ CallExpression @22:18
│              └─ Identifier "level1" [variable:0] @22:12
├─ FunctionDeclaration "loop_closure_var" @27:1
│  └─ body
│     └─ FunctionBody @28:5
│        ├─ VariableDeclaration (var) @28:5
│        │  └─ VariableDeclarator @28:5
│        │     ├─ Identifier "fns" [variable:0] (var) @28:9
│        │     └─ ArrayExpression @28:15
│        ├─ ForStatement @29:5
│        │  ├─ init
│        │  │  └─ VariableDeclaration (var) @29:10
│        │  │     └─ VariableDeclarator @29:10
│        │  │        ├─ Identifier "i" (var) @29:14
│        │  │        └─ NumericLiteral 0 @29:18
│        │  ├─ test
│        │  │  └─ BinaryExpression (<) @29:23
│        │  │     ├─ Identifier "i" (var) @29:21
│        │  │     └─ NumericLiteral 3 @29:25
│        │  ├─ update
│        │  │  └─ UpdateExpression (++, postfix) @29:29
│        │  │     └─ Identifier "i" (var) @29:28
│        │  └─ body
│        │     └─ BlockStatement @29:33
│        │        └─ ExpressionStatement @30:9
│        │           └─ CallExpression @30:17
│        │              ├─ MemberExpression @30:12
│        │              │  ├─ Identifier "fns" [variable:0] (var) @30:9
│        │              │  └─ Identifier "push" @30:13
│        │              └─ FunctionExpression "" @30:18
│        │                 └─ body
│        │                    └─ FunctionBody @31:13
│        │                       └─ ReturnStatement @31:13
│        │                          └─ Identifier "i" (var) @31:20
│        └─ ReturnStatement @34:5
│           └─ Identifier "fns" [variable:0] (var) @34:12
└─ FunctionDeclaration "loop_closure_let" @37:1
   └─ body
      └─ FunctionBody @38:5
         ├─ VariableDeclaration (var) @38:5
         │  └─ VariableDeclarator @38:5
         │     ├─ Identifier "fns" [variable:0] (var) @38:9
         │     └─ ArrayExpression @38:15
         ├─ ForStatement @39:5
         │  ├─ init
         │  │  └─ VariableDeclaration (let) @39:10
         │  │     └─ VariableDeclarator @39:10
         │  │        ├─ Identifier "i" (let) @39:14
         │  │        └─ NumericLiteral 0 @39:18
         │  ├─ test
         │  │  └─ BinaryExpression (<) @39:23
         │  │     ├─ Identifier "i" (let) @39:21
         │  │     └─ NumericLiteral 3 @39:25
         │  ├─ update
         │  │  └─ UpdateExpression (++, postfix) @39:29
         │  │     └─ Identifier "i" (let) @39:28
         │  └─ body
         │     └─ BlockStatement @39:33
         │        └─ ExpressionStatement @40:9
         │           └─ CallExpression @40:17
         │              ├─ MemberExpression @40:12
         │              │  ├─ Identifier "fns" [variable:0] (var) @40:9
         │              │  └─ Identifier "push" @40:13
         │              └─ FunctionExpression "" @40:18
         │                 └─ body
         │                    └─ FunctionBody @41:13
         │                       └─ ReturnStatement @41:13
         │                          └─ Identifier "i" (let) @41:20
         └─ ReturnStatement @44:5
            └─ Identifier "fns" [variable:0] (var) @44:12
