<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Not quite, the mechanism which does this in the spec is SetFunctionName (<a href="http://www.ecma-international.org/ecma-262/6.0/#sec-setfunctionname" class="">http://www.ecma-international.org/ecma-262/6.0/#sec-setfunctionname</a>), and it only works for specific syntactic constructs (eg, `foo = function() {}` -> anonymous function is named “foo”, let x = () => {} -> anonymous arrow is named “x”, etc).<div class=""><br class=""></div><div class="">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.</div></div></div></blockquote><div class=""><br class=""></div></div><div class="">Ah, fascinating! That’s something that I overlooked. It is an odd mix of static and dynamic, though.</div><div class=""><br class=""></div><div class="">For example: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation" class="">http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation</a></div><div class=""><br class=""></div><div class="">My understanding:</div><div class=""><br class=""></div><div class="">– The actions themselves happen at runtime, not at compile time.</div><div class="">– (1.e) IsAnonymousFunctionDefinition() is a static check that only holds if AssignmentExpression is an anonymous function expression (syntactically).</div><div class="">– (1.e.i) is a dynamic check, SetFunctionName() happens dynamically, too.</div><div class=""><br class=""></div><div class="">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).</div><br class="">
<div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">-- <br class="">Dr. Axel Rauschmayer<br class=""><a href="mailto:axel@rauschma.de" class="">axel@rauschma.de</a><br class=""><a href="http://rauschma.de" class="">rauschma.de</a></div><div class=""><br class=""></div></div></div></div></div></div></body></html>