diff --git a/packages/babel-traverse/src/scope/index.js b/packages/babel-traverse/src/scope/index.js index 082dc0bedf..c11268402e 100644 --- a/packages/babel-traverse/src/scope/index.js +++ b/packages/babel-traverse/src/scope/index.js @@ -402,7 +402,7 @@ export default class Scope { if (path.isLabeledStatement()) { this.registerBinding("label", path); } else if (path.isFunctionDeclaration()) { - this.registerBinding("hoisted", path.get("id"), true); + this.registerBinding("hoisted", path.get("id"), path); } else if (path.isVariableDeclaration()) { let declarations = path.get("declarations"); for (let declar of (declarations: Array)) { diff --git a/packages/babel-types/src/retrievers.js b/packages/babel-types/src/retrievers.js index 2dc1ffdb11..8ef03c6453 100644 --- a/packages/babel-types/src/retrievers.js +++ b/packages/babel-types/src/retrievers.js @@ -27,15 +27,28 @@ export function getBindingIdentifiers( } else { ids[id.name] = id; } - } else if (t.isExportDeclaration(id)) { + continue; + } + + if (t.isExportDeclaration(id)) { if (t.isDeclaration(node.declaration)) { search.push(node.declaration); } - } else if (outerOnly) { - if (t.isFunction(id)) { + continue; + } + + if (outerOnly) { + if (t.isFunctionDeclaration(id)) { search.push(id.id); + continue; } - } else if (keys) { + + if (t.isFunctionExpression(id)) { + continue; + } + } + + if (keys) { for (let i = 0; i < keys.length; i++) { let key = keys[i]; if (id[key]) {