Twitter hashtag: #esspec
便利ツール
時事ネタ
自己紹介 (近況報告)
syumai syumai.icon
Go / TSを書いて暮らしてます
今週末札幌でECMAScriptの仕様の読み方について話します
来月Asakusa.goと言うイベントをやります
iwatsurut
とくに、イベントもなく過ごしています。
8/4 TinyGo のキーボード作成ハンズオンに参加しました。
WebHID API という 規格があることをしった。
15.6 インチの アイリスオーヤマのタブレット買った。
yebis0942
エディタ探しの旅をしています
VSCode -> Cursor -> Zed -> Cursor
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
{
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 の時に変な動きをする