diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/actual.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/actual.js
new file mode 100644
index 0000000000..f0b8be5f0b
--- /dev/null
+++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/actual.js
@@ -0,0 +1,5 @@
+function render(title= '') {
+ return () => (
+
+ );
+}
diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/expected.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/expected.js
new file mode 100644
index 0000000000..e03efdea64
--- /dev/null
+++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/expected.js
@@ -0,0 +1,7 @@
+function render() {
+ var title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
+
+ var _ref = ;
+
+ return () => _ref;
+}
\ No newline at end of file
diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/options.json b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/options.json
new file mode 100644
index 0000000000..9f24ed8416
--- /dev/null
+++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params-2/options.json
@@ -0,0 +1,8 @@
+{
+ "plugins": [
+ "transform-es2015-parameters",
+ "transform-react-constant-elements",
+ "transform-es2015-block-scoping",
+ "syntax-jsx"
+ ]
+}
diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/actual.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/actual.js
new file mode 100644
index 0000000000..edf957a002
--- /dev/null
+++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/actual.js
@@ -0,0 +1,5 @@
+function render(Component, text = '') {
+ return function() {
+ return ;
+ }
+}
diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/expected.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/expected.js
new file mode 100644
index 0000000000..a11f2f892a
--- /dev/null
+++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/expected.js
@@ -0,0 +1,9 @@
+function render(Component) {
+ var text = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+
+ var _ref = ;
+
+ return function () {
+ return _ref;
+ };
+}
diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/options.json b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/options.json
new file mode 100644
index 0000000000..9f24ed8416
--- /dev/null
+++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/dont-hoist-before-default-params/options.json
@@ -0,0 +1,8 @@
+{
+ "plugins": [
+ "transform-es2015-parameters",
+ "transform-react-constant-elements",
+ "transform-es2015-block-scoping",
+ "syntax-jsx"
+ ]
+}
diff --git a/packages/babel-traverse/src/path/lib/hoister.js b/packages/babel-traverse/src/path/lib/hoister.js
index 0a942ecc10..b2a02c1a96 100644
--- a/packages/babel-traverse/src/path/lib/hoister.js
+++ b/packages/babel-traverse/src/path/lib/hoister.js
@@ -133,7 +133,14 @@ export default class PathHoister {
if (this.scope === scope) return;
// needs to be attached to the body
- return scope.path.get("body").get("body")[0];
+ const bodies = scope.path.get("body").get("body");
+ for (let i = 0; i < bodies.length; i++) {
+ // Don't attach to something that's going to get hoisted,
+ // like a default parameter
+ if (bodies[i].node._blockHoist) continue;
+ return bodies[i];
+ }
+ // deopt: If here, no attachment path found
} else {
// doesn't need to be be attached to this scope
return this.getNextScopeAttachmentParent();