function hoisting like var

Igor Bukanov igor at
Fri Jul 25 05:36:16 PDT 2008

2008/7/25 Lars Hansen <lhansen at>:
> Is
>  {{ return }}
> syntactic sugar for
>  (function() {{ return }})()
> too?

I have forgot about the return or break/continue. But this is not a
point since a syntax sugar for (function() { code })() can require
that code must not contain return or break/continue outside the code
effectively making it a let expression on steroids. The point is that
is it worth to provide a shortcut for (function() { code })() since
that is used on web. Of cause, if desired, such shortcut should be
pure syntax extension over ES3, not {{ }} as that silently changes the
meaning of the existing code.

One way to get that extension comes from an observation that ES4
allows to drop the  braces around function body and the return keyword
if the body is the single return exp. If ES3.1 would support it, then
to simulate an effect of let expression like

  let (a = arg1, b = arg2) expression

one could write

  (function(a, b) expression)(arg1, arg2)


  (function(a, b) a = arg1, b = arg2, expression)()

If, in addition to this shortcut, ES4 would allow to drop an empty
argument list from a function with a requirement that function { }
always means an expression and ES3.1 would also support that, then in
place of a block with let variables one can write:

function {


Regards, Igor

More information about the Es4-discuss mailing list