diff --git a/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/arguments-global-var/output.js b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/arguments-global-var/output.js index f19432c82500..e458a2d298d9 100644 --- a/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/arguments-global-var/output.js +++ b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/arguments-global-var/output.js @@ -1,7 +1,7 @@ var _arguments2 = 1; function fn() { - var _arguments = _arguments2; + var _arguments = arguments; var foo = function () { return _arguments; diff --git a/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/exec.js b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/exec.js new file mode 100644 index 000000000000..428e0f6986b2 --- /dev/null +++ b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/exec.js @@ -0,0 +1,11 @@ +var arguments = [1, 2, 3]; +var arr = () => arguments[0]; + +expect(arr()).toStrictEqual(1) + +function foo(n) { +var f = () => arguments[0] + n; // foo's implicit arguments binding. arguments[0] is n +return f(); +} + +expect(foo(3)).toStrictEqual(6) \ No newline at end of file diff --git a/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/input.js b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/input.js new file mode 100644 index 000000000000..31a30fd84854 --- /dev/null +++ b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/input.js @@ -0,0 +1,10 @@ +var arguments = [1, 2, 3]; +var arr = (n) => arguments[0]; + +arr(4); // 1 + +function foo(n) { +var f = () => arguments[0] + n; // foo's implicit arguments binding. arguments[0] is n +return f(); +} + \ No newline at end of file diff --git a/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/options.json b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/options.json new file mode 100644 index 000000000000..7e8d4deeee4a --- /dev/null +++ b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/options.json @@ -0,0 +1,4 @@ +{ + "sourceType": "script", + "plugins": ["transform-arrow-functions"] +} diff --git a/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/output.js b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/output.js new file mode 100644 index 000000000000..b23abd2158c6 --- /dev/null +++ b/packages/babel-plugin-transform-arrow-functions/test/fixtures/arrow-functions/implicit-var-arguments/output.js @@ -0,0 +1,18 @@ +var _arguments = [1, 2, 3]; + +var arr = function (n) { + return _arguments[0]; +}; + +arr(4); // 1 + +function foo(n) { + var _arguments2 = arguments; + + var f = function () { + return _arguments2[0] + n; + }; // foo's implicit arguments binding. arguments[0] is n + + + return f(); +} diff --git a/packages/babel-traverse/src/scope/index.ts b/packages/babel-traverse/src/scope/index.ts index e2eb17d8f724..71e43ebb005f 100644 --- a/packages/babel-traverse/src/scope/index.ts +++ b/packages/babel-traverse/src/scope/index.ts @@ -1138,6 +1138,13 @@ export default class Scope { } else { return binding; } + } else if ( + !binding && + name === "arguments" && + scope.path.isFunction() && + !scope.path.isArrowFunctionExpression() + ) { + break; } previousPath = scope.path; } while ((scope = scope.parent));