Program (script) @3:1
├─ FunctionDeclaration "defaults" @3:1
│  ├─ parameters
│  │  ├─ Identifier "a" [argument:0] @3:19
│  │  └─ Identifier "b" [argument:1] @3:19
│  │     └─ default
│  │        └─ BinaryExpression (+) @3:28
│  │           ├─ Identifier "a" [argument:0] @3:26
│  │           └─ NumericLiteral 1 @3:30
│  └─ body
│     └─ FunctionBody @4:5
│        ├─ VariableDeclaration (let) @4:5
│        │  └─ VariableDeclarator @4:5
│        │     ├─ Identifier "c" [variable:0] (let) @4:9
│        │     └─ Identifier "b" [argument:1] @4:13
│        └─ ReturnStatement @5:5
│           └─ Identifier "c" [variable:0] (let) @5:12
├─ FunctionDeclaration "default_with_closure" @9:1
│  ├─ parameters
│  │  ├─ Identifier "x" @9:31
│  │  └─ Identifier "f" [argument:1] @9:31
│  │     └─ default
│  │        └─ FunctionExpression "" [arrow] @9:38
│  │           └─ body
│  │              └─ FunctionBody @9:38
│  │                 └─ ReturnStatement @9:38
│  │                    └─ Identifier "x" @9:44
│  └─ body
│     └─ FunctionBody @10:5
│        ├─ VariableDeclaration (let) @10:5
│        │  └─ VariableDeclarator @10:5
│        │     ├─ Identifier "x2" [variable:0] (let) @10:9
│        │     └─ CallExpression @10:15
│        │        └─ Identifier "f" [argument:1] @10:14
│        └─ ReturnStatement @11:5
│           └─ Identifier "x2" [variable:0] (let) @11:12
├─ FunctionDeclaration "complex_defaults" @16:1
│  ├─ parameters
│  │  └─ Identifier "a" [argument:0] @16:27
│  │     └─ default
│  │        └─ NumericLiteral 1 @16:31
│  └─ body
│     └─ FunctionBody @17:5
│        ├─ VariableDeclaration (var) @17:5
│        │  └─ VariableDeclarator @17:5
│        │     ├─ Identifier "v" [variable:0] (var) @17:9
│        │     └─ Identifier "a" [argument:0] @17:13
│        ├─ VariableDeclaration (let) @18:5
│        │  └─ VariableDeclarator @18:5
│        │     ├─ Identifier "l" [variable:1] (let) @18:9
│        │     └─ Identifier "a" [argument:0] @18:13
│        └─ ReturnStatement @19:5
│           └─ BinaryExpression (+) @19:14
│              ├─ Identifier "v" [variable:0] (var) @19:12
│              └─ Identifier "l" [variable:1] (let) @19:16
└─ FunctionDeclaration "destruct_defaults" @23:1
   ├─ parameters
   │  └─ BindingPattern (object)
   │     └─ entry
   │        ├─ name
   │        │  └─ Identifier "x" [variable:0] @23:30
   │        └─ initializer
   │           └─ NumericLiteral 10 @23:34
   │     └─ default
   │        └─ ObjectExpression @23:41
   └─ body
      └─ FunctionBody @24:5
         └─ ReturnStatement @24:5
            └─ Identifier "x" [variable:0] @24:12
