ECMAScript仕様輪読会 #60
前回: ECMAScript仕様輪読会 #59
Scrapboxの招待リンク: https://scrapbox.io/projects/esspec/invitations/85b96c9fa718ce5185e307196ed8fb53
connpass: https://esspec.connpass.com/
Discord: https://discord.gg/59S3y6weQj
ES Spec Draft: https://tc39.es/ecma262/
読み物リスト
Twitter hashtag: #esspec
20:59 再開
便利ツール
esspec-memo: https://tars0x9752.github.io/esspec-memo/esspec.html
Scrapbox Codeblock Generator: https://vzvu3k6k.github.io/scrapbox-codeblock/
TC39 Terminology: https://github.com/tc39/how-we-work/blob/main/terminology.md
時事ネタ
自己紹介 (近況報告)
syumai syumai.icon
Twitter: https://twitter.com/__syumai GitHub: https://github.com/syumai
Go / TSを書いて暮らしてます
週末、Hono Conferenceと言うイベントに行きます
iwatsurut
とくに、イベントもなく過ごしています。
tars0x9752 (たーず / naoki aoyama) tars0x9752.icon
https://github.com/tars0x9752
いろいろ体調を崩したりしていた
健康のありがたさを実感
たいち ひ
前回のあらすじ
今回の範囲
https://tc39.es/ecma262/#sec-functiondeclarationinstantiation のアルゴリズムステップの 28 から
code:js
function f(x = a, y = 3) {
var a = 1;
x();
console.log(a, x, y);
}
f();
/*
function f(x = a, y = 3) {
^
ReferenceError: a is not defined
*/
Step 1時点のExecutionContextの内容
LexicalEnvironment: envA
VariableEnvironment: envA
Step 20時点のExecution Contextの内容
LexicalEnvironment: envB(envA)
VariableEnvironment: envA
Step 28 時点のExecution Contextの内容
LexicalEnvironment: envB(envA)
VariableEnvironment: envC(envB(envA))
Step 32 時点のExecution Contextの内容
LexicalEnvironment: envD(envC(envB(envA)))
VariableEnvironment: envC(envB(envA))
code:js
function f(a = 1 /* envB */) {
var a; // envC (初期値として、envBのaの値を使用する)
console.log(a);
}
f();
$ node c.js
1
code:js
function f() {
class c {}
c = 1; // const 以外のdeclarationsは全て再代入可能
console.log(c);
}
f();