Another:

The notes from last week's meeting said WRT function parameter bindings:

Conclusion/Resolution
- `var` bindings and are in scope within the function
- cannot use `let` to shadow a parameter
- defaults can refer to any top level binding

Using the above guidance, consider this one:

function test1(b=g) [
    function g() {};
    return typeof g +" "+ typeof b;
}
console.log(test1());   

presumably, this produces: "function function"
Which means that g is instantiated and initialized prior to apply the defaults 
to the parameters.

Now consider:

function test2(g,b=g) [
    function g() {};
    return typeof g +" "+ typeof b;
}
console.log(test2());   

By the same logic, this presumably must also produce: "function function"

So how about:

console.log(test2(1));   

Is it: "function number" or "function function" or "number number"

In ES5, 

function test3(g) [
    function g() {};
    return typeof g;
}
console.log(test3(1));   

produces "function", so the "number number" alternative doesn't seem plausible. 
 In EX5, nested function declarations over-write parameters that share the same 
name. 

"function number" may seem reasonable for  the second call of test2 but that 
seems inconsistent with the first call and with test1.

So, it seems that nested function declarations must be instantiated and bound 
before parameter instantiation/default value initialization and that parameters 
that share a name with a such function declaration do not get reinitialized 
(with either an argument or default value) during parameter instantiation.

Allen



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to