diff --git a/packages/babel-plugin-transform-parameters/src/params.js b/packages/babel-plugin-transform-parameters/src/params.js index 000a8505a581..4bf346b5be7b 100644 --- a/packages/babel-plugin-transform-parameters/src/params.js +++ b/packages/babel-plugin-transform-parameters/src/params.js @@ -32,7 +32,11 @@ function isSafeBinding(scope, node) { const iifeVisitor = { ReferencedIdentifier(path, state) { const { scope, node } = path; - if (node.name === "eval" || !isSafeBinding(scope, node)) { + if ( + node.name === "eval" || + !isSafeBinding(scope, node) || + !isSafeBinding(state.scope, node) + ) { state.iife = true; path.stop(); } diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-9947/input.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-9947/input.js new file mode 100644 index 000000000000..e2ca36c7ddb2 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-9947/input.js @@ -0,0 +1,6 @@ +let x = "outside"; +function outer(a = () => x) { + let x = "inside"; + return a(); +} +outer(); diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-9947/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-9947/output.js new file mode 100644 index 000000000000..74ff50c2df94 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-9947/output.js @@ -0,0 +1,13 @@ +var x = "outside"; + +function outer() { + var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { + return x; + }; + return function () { + var x = "inside"; + return a(); + }(); +} + +outer();