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

Reply via email to