ECMAScript仕様輪読会 #63
前回: ECMAScript仕様輪読会 #62
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
便利ツール
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を書いて暮らしてます
今週末札幌でECMAScriptの仕様の読み方について話します
https://www.frontend-conf.jp/
来月Asakusa.goと言うイベントをやります
https://asakusago.connpass.com/event/327677/
iwatsurut
とくに、イベントもなく過ごしています。
8/4 TinyGo のキーボード作成ハンズオンに参加しました。
WebHID API という 規格があることをしった。
15.6 インチの アイリスオーヤマのタブレット買った。
yebis0942
エディタ探しの旅をしています
VSCode -> Cursor -> Zed -> Cursor
https://zed.dev/blog/zed-decoded-vim
vim相当の機能を自前実装しようとしている
前回のあらすじ
16 ECMAScript Language: Scripts and Modules
code:js
~/go/src/github.com/syumai/til/js/esspec63(main ✗) bat c.js
───────┬─────────────────────────────────
│ File: c.js
───────┼────────────────────────────────
1 │ (0, eval)("var a = 1;");
2 │ var b = 2;
3 │ console.log("a", globalThis.a);
4 │ console.log("b", globalThis.b);
───────┴────────────────────────────────
~/go/src/github.com/syumai/til/js/esspec63(main ✗) node c.js
a 1
b undefined
~/go/src/github.com/syumai/til/js/esspec63(main ✗) deno run c.js
a 1
b undefined
~/go/src/github.com/syumai/til/js/esspec63(main ✗) bun run c.js
a 1
b undefined
今回の範囲
16.1.6
code:js
// ブラウザで実行
let NaN = 1;
VM275:1 Uncaught SyntaxError: Identifier 'NaN' has already been declared
9.1.1.4.16 CanDeclareGlobalFunction
code:js
~/go/src/github.com/syumai/til/js/esspec63(main ✗) cat f.js
(0, eval)(`
console.log(
Object.getOwnPropertyDescriptor(globalThis, "Number")
);
function Number() {
console.log("number!");
}
globalThis.Number();
`);
~/go/src/github.com/syumai/til/js/esspec63(main ✗) node f.js
{
value: Function: Number,
writable: true,
enumerable: true,
configurable: true
}
number!
今回の学び
どのコンテキストでコードを実行しているのか見抜くのが難しい(見抜けなかった)yebis0942.icon
GlobalDeclarationInstantiationを複数回に分けて実行したかった(できなかった)
code:js
(0, eval)(`
function f() {}
(0, eval)("var f = 1;");
console.log(f); // 1
`);
Node.js / Deno / Bunのスクリプトの実行されている環境は、グローバルではない
Node.jsは、 new.target の時に変な動きをする