diff --git a/src/babel/transformation/transformers/es6/parameters.default.js b/src/babel/transformation/transformers/es6/parameters.default.js index 4fbf6c7f96..6f2b03da65 100644 --- a/src/babel/transformation/transformers/es6/parameters.default.js +++ b/src/babel/transformation/transformers/es6/parameters.default.js @@ -12,8 +12,10 @@ var hasDefaults = function (node) { var iifeVisitor = { ReferencedIdentifier(node, parent, scope, state) { - if (!state.scope.hasOwnBinding(node.name)) return; - if (state.scope.bindingIdentifierEquals(node.name, node)) return; + if (node.name !== "eval") { + if (!state.scope.hasOwnBinding(node.name)) return; + if (state.scope.bindingIdentifierEquals(node.name, node)) return; + } state.iife = true; this.stop(); diff --git a/test/core/fixtures/transformation/es6.parameters.default/eval/actual.js b/test/core/fixtures/transformation/es6.parameters.default/eval/actual.js new file mode 100644 index 0000000000..7446785fe7 --- /dev/null +++ b/test/core/fixtures/transformation/es6.parameters.default/eval/actual.js @@ -0,0 +1,6 @@ +let x = "outside"; +function outer(a = () => eval("x")) { + let x = "inside"; + return a(); +} +outer(); diff --git a/test/core/fixtures/transformation/es6.parameters.default/eval/expected.js b/test/core/fixtures/transformation/es6.parameters.default/eval/expected.js new file mode 100644 index 0000000000..060d7b250e --- /dev/null +++ b/test/core/fixtures/transformation/es6.parameters.default/eval/expected.js @@ -0,0 +1,13 @@ +"use strict"; + +var x = "outside"; +function outer() { + var a = arguments[0] === undefined ? function () { + return eval("x"); + } : arguments[0]; + return (function () { + var x = "inside"; + return a(); + })(); +} +outer();