Skip to content

Is ES6 parameter scope not supported? #130

@getify

Description

@getify

Apologies if this is a known problem. I couldn't quite tell from my review of existing issue threads.

My problem is related to the scopes set up by this code:

var x = (a,b = () => a) => { var a = 2; return [a, b()]; }
x(5);  // [2,5]

As you can see from the result output, the parameter list peculiarly has its own scope which is distinguishable when there's a closure in the parameter list. The a of value 5 is different from the a of value 2.

So, I would expect to get 4 scopes here from escopes:

  1. The outer scope
  2. The main function (x()) scope
  3. The intermediate parameter scope (where the parameter a and b comes from)
  4. The scope of the b() function

However, (3) is missing from the escopes output. Moreover, the a (parameter) and b (parameter) are recorded as belonging to the function (x()) scope. Usually that wouldn't matter and would be OK, but when there's a parameter list closure, it matters. There should be 3 variables (both as and the b) in the function, but there's only 2.

This inaccuracy is affecting my usage in ESLint, which I believe uses escopes. I can't fully accurately detect that a parameter is used or not if I cannot distinguish between the two as in that above code snippet.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions