return when desugaring to closures

Garrett Smith dhtmlkitchen at
Tue Sep 2 14:48:50 PDT 2008

On Tue, Sep 2, 2008 at 2:16 PM, Lex Spoon <spoon at> wrote:
> On Sun, Aug 24, 2008 at 3:17 AM, Brendan Eich <brendan at> wrote:
>> First, let's settle the hash over whether any desugaring without
>> extensions such as return-to-label, reformed lexical scope, tamed
>> this, banished arguments, etc. etc., trumps adding a new binding
>> form, to wit: let as block scoped var.
> With no extensions, it is true, return would end up returning from a
> different method under the proposed rewrite.  Likewise, this and
> arguments would cause trouble.  Possibly break and continue would,
> depending on what their precise semantics are.

Wouldn't any Completion Type cause problems?

(function() {
  throw Error("help.");


Wouldn't the caller, stack, et c, be all messed up?

> However, they work under some specific extensions that appear to
> benefit JavaScript anyway.  I suspect that most languages with both
> return expressions and nested functions will eventually want a way to
> return from other than the innermost function.  More generally, it
> would be really nice if programmers could safely add a nested function
> without losing access to important things from their surrounding
> scope.  That goes not just for return, but also arguments, this,
> break, and continue.

Those are not lost if you store them in a variable in the containing scope.

It wouldn't make sense to have - return: outerFunction - because the
outer function might not have been the caller. In fact, it probably
won't be in the majority of cases.

>  It's an orthoganality problem.  With
> JavaScript's current limited return expression, programmers have
> trouble when they try to use both function nesting and return at the
> same time.  Using one feature makes it harder to use the other.

I've never wanted to do that; to make the inner function make the
outer function return.

> Finally, there was a little bit of question about what the semantics
> would be.  Let me go into just a little more detail.  The idea is that
> instead of just "return foo", you could also put a label on the
> return.

What would you use that for?

> -Lex

More information about the Es-discuss mailing list