On second thought, since this is a method, directly calling the method name 
loses `this` value, so people might not do it very often. If recursion is 
needed, they might just do `this.next()`.

The `name` property being set is trivia, and `a.next.name === “next”` sounds 
reasonable.

So, no more complain. :)

> On Dec 17, 2014, at 12:32 PM, Glen Huang <[email protected]> wrote:
> 
> 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] 
>> <mailto:[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