Does `{ next() { next() } }` have a recursive method?

Rick Waldron waldron.rick at gmail.com
Tue Dec 16 20:13:30 PST 2014


On Tue Dec 16 2014 at 11:03:43 PM Glen Huang <curvedmark at gmail.com> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20141217/05dba694/attachment.html>


More information about the es-discuss mailing list