issue: function hoisting and parameter default value initialization

Allen Wirfs-Brock allen at wirfs-brock.com
Mon Oct 8 10:45:18 PDT 2012


On Oct 8, 2012, at 10:35 AM, Andreas Rossberg wrote:

> On 8 October 2012 19:18, Allen Wirfs-Brock <allen at wirfs-brock.com> wrote:
>> 
>> On Oct 8, 2012, at 10:04 AM, Andreas Rossberg wrote:
>> 
>>> On 8 October 2012 18:24, Allen Wirfs-Brock <allen at wirfs-brock.com> wrote:
>>>> You desugaring would break ES<=5.1 compatibility for:
>>>> 
>>>> (function (p) {
>>>>  var p;
>>>>  return typeof p
>>>> })("test")
>>>> 
>>>> ES5.1 returns "string", your desugaring returns "undefined"
>>> 
>>> I'm probably just being blind, but I'm not seeing it. Why?
>>> 
>> In ES <= 5.1, function declarations over-write formal parameters.  But var declarations, without initializer do not assign undefined to already local bindings (including formal parameters) that already exist.
> 
> Yes.
> 
>> You desugaring would create a new var declaration in a new scope contours that would be initialized to undefined and shadow the like-named formal parameter.
> 
> But it creates no new var declarations. Your function would presumably become

Right, I glossed over the fact that both the inner and outer function declaration introduce bindings for the formals

Allen





More information about the es-discuss mailing list