Note that making this behavior dynamic means that every assignment operation would have to explicitly check whether or not its RHS dynamically evaluated to a function object, and if so whether the function already had a name property. That's real, measurable runtime cost being added to every assignment.
Realistically, that's just not going to happen. Allen On Sep 18, 2015, at 1:53 AM, Alexander Jones wrote: > Personally I'm already slightly weirded by the static behaviour - doing this > dynamically would result in cases where a function which is otherwise > anonymous would happen to claim the first name of many that it's assigned to > throughout its lifetime. This would actually be observable at runtime as > `name` changing. Or maybe I'm overlooking something. > > Better IMO is if the stack trace would always include the name of the > function *as it was called*, in addition to the function's own `name`, > assuming its presence. That, assuming thoughtfully named variables, might > give a little extra immediate insight into the call stack. Obviously if the > function call had no name, i.e. it was an arbitrary expression, we'd have to > skip this. > > Alex > > On Thursday, September 17, 2015, Axel Rauschmayer <rausc...@icloud.com> wrote: >> Not quite, the mechanism which does this in the spec is SetFunctionName >> (http://www.ecma-international.org/ecma-262/6.0/#sec-setfunctionname), and >> it only works for specific syntactic constructs (eg, `foo = function() {}` >> -> anonymous function is named “foo”, let x = () => {} -> anonymous arrow is >> named “x”, etc). >> >> It does not apply to things like `compose(thingA, thingB)`, which is not an >> anonymous function definition.These function names aren’t set at runtime, >> it’s a parse-time operation, and depends on the productions that are parsed. > > Ah, fascinating! That’s something that I overlooked. It is an odd mix of > static and dynamic, though. > > For example: > http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation > > My understanding: > > – The actions themselves happen at runtime, not at compile time. > – (1.e) IsAnonymousFunctionDefinition() is a static check that only holds if > AssignmentExpression is an anonymous function expression (syntactically). > – (1.e.i) is a dynamic check, SetFunctionName() happens dynamically, too. > > Wouldn’t it make sense to turn IsAnonymousFunctionDefinition() into a dynamic > check, too? A check whether _rval_ is a function should suffice (given the > check whether property `name` exists, later). > > -- > Dr. Axel Rauschmayer > a...@rauschma.de > rauschma.de > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss