Got it. Thank you.
Was kinda hoping I was wrong though.
```js
let next = () => console.log(1);
let a = { next() { console.log(2); next() } };
a.next();
```
I guess people would incline to guess this is a recursion, since the method
syntax isn’t as obvious as `{ next: function () {} }` that you are creating an
anonymous function. Also from the spec, I believe `a.next.name` has the value
“next” in the snippet, this looks like a (false) indication that the function
created is not anonymous.
> On Dec 17, 2014, at 12:13 PM, Rick Waldron <[email protected]> wrote:
>
>
>
> On Tue Dec 16 2014 at 11:03:43 PM Glen Huang <[email protected]
> <mailto:[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