constructor(tree, scopeBuilder) {
    super();
    this.scopeBuilder_ = scopeBuilder;
    // Not all Loop Statements have a scope, but all their block bodies should.
    // Example: a For Loop with no initializer, or one that uses 'var' doesn't
    // have a Scope. Neither does a While Loop.
    // We still try to get the scope of a Loop if it's available, because
    // it might have block binding in its initializer that we can't ignore.
    this.topScope_ = scopeBuilder.getScopeForTree(tree) ||
        scopeBuilder.getScopeForTree(tree.body);
    this.outOfScope_ = null;
    this.acceptLoop_ = tree.isIterationStatement();
  }
FindBlockBindingInLoop class that finds if a tree contains both a
BlockBinding declaration (i.e. let/const) AND a function that might
depend on them.