<html><head><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="">Question: what does the following code snippet log in the last line?</div><div class=""><br class=""></div><div class="">```js</div><div class="">function* gen() {</div><div class="">    yield this;</div><div class="">}</div><div class="">let genObj = new gen();</div><div class="">let [_this] = genObj;</div><div class="">console.log(_this === genObj); // ???</div><div class="">```</div><div class=""><br class=""></div><div class="">I’m finding three answers:</div><div class=""><br class=""></div><div class="">1. The spec says [1] that any reference to `this` in a generator invoked via `new` causes a `ReferenceError`.</div><div class=""><br class=""></div><div class="">2. Firefox logs `false` for the code snippet.</div><div class=""><br class=""></div><div class="">3. A year ago, Allen stated [2] that if you invoke a generator function via `new`, `this` points to the generator object. On other words, the code snippet would log `true`.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">[1] <a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generator-function-definitions-runtime-semantics-evaluatebody" class="">https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generator-function-definitions-runtime-semantics-evaluatebody</a></div><div class="">[2] <a href="https://esdiscuss.org/topic/reason-why-generators-do-not-have-references-to-themselves#content-8" class="">https://esdiscuss.org/topic/reason-why-generators-do-not-have-references-to-themselves#content-8</a></div><br class=""><div apple-content-edited="true" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 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="">rauschma.de<br class=""></div></div></div></div><br class=""></div></body></html>