diff --git a/packages/babel-plugin-transform-block-scoping/src/index.js b/packages/babel-plugin-transform-block-scoping/src/index.js index 50c254c848a8..35b8c3704556 100644 --- a/packages/babel-plugin-transform-block-scoping/src/index.js +++ b/packages/babel-plugin-transform-block-scoping/src/index.js @@ -453,9 +453,7 @@ class BlockScoping { if (binding.kind === "let" || binding.kind === "const") { binding.kind = "var"; - if (wrappedInClosure) { - scope.removeBinding(ref.name); - } else { + if (!wrappedInClosure) { scope.moveBindingTo(ref.name, parentScope); } } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js new file mode 100644 index 000000000000..39b916698335 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js @@ -0,0 +1,4 @@ +for (const {foo, ...bar} of {}) { + () => foo; + bar; +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json new file mode 100644 index 000000000000..d829970edd1b --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-block-scoping", ["proposal-object-rest-spread", { "loose": true }]] +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js new file mode 100644 index 000000000000..397561aef9f6 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js @@ -0,0 +1,16 @@ +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +var _loop = function (foo, bar) { + () => foo; + + bar; +}; + +for (var _ref of {}) { + var { + foo + } = _ref, + bar = _objectWithoutPropertiesLoose(_ref, ["foo"]); + + _loop(foo, bar); +}