On Tue Dec 16 2014 at 11:03:43 PM Glen Huang <[email protected]> wrote:
> To rephrase the problem:
>
> Assuming `next` was never defined.
>
> ```js
> let a = { next() { next() } };
> a.next();
> ```
>
> The result of running this code is runtime error or infinite recursion?
>
> I tried to find the answer in the spec, but the initialization and calling
> of a function object is a bit overwhelming for me.
>
> The evaluation of FunctionExpression contains a step "Call the
> CreateImmutableBinding concrete method of envRec passing name as the
> argument.” together with "Call the InitializeBinding concrete method of
> envRec passing name and closure as the arguments. I" guess that’s the steps
> enable directly calling function name in the function body?
>
Correct. This is defines the runtime evaluation semantics for the `next:
function next() { }` part of `let a = { next: function next() { } }`.
>
> And since DefineMethod doesn’t have such steps, is it correct to assume
> the above snippet should result in a runtime error?
>
It would be a ReferenceError, because next is not defined.
Rick
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss