2020/04/30
古川 亘 / HN: 古都こと
フロントエンドエンジニア
@株式会社トップゲート 大阪事業所
ゲーム / プログラミング
TypeScript / React / React Native / Rust / Go
趣味:
技術:
ブログやってます
(function main(t) {
[...t].forEach((d) => console.log(summarize(d.innerText)));
})(document.querySelectorAll('div'));
↑
こういうわけわからんのを
倒す!!!!!
const a = 1;
const b = 2;
const c = a + b;
console.log(c);
const a = new Array(5).fill(0).map((_, i) => i);
🙂
const a = 1 + 2;
🤨
🤪
const x = ((a) => (b) => a + b)(1)(2);
字句解析(Lexical Analysis)
構文解析(Syntax Analysis)
意味解析(Semantic Analysis)
細かい処理挟みつつ
バイトコードや機械語に
const a = 1 + 2;
console.log(a);
式
文
const a = 1 + 2;
const a = 3;
console.log(a);
undefined;
※console.logに戻り値はないためundefinedになる
const a = 1 + 2; // 代入文
1 + 2 + 3; // 式だけど文として扱える
console.log('Hi'); // これも式だけど文
const add = (a, b) => a + b;
console.log(add(1, add(2, 3)));
const add = (a, b) => a + b;
console.log(add(1, add(2, 3)));
四角で囲っているのが式
関数呼び出し式では
引数の式を左から順番に評価する
const add = (a, b) => a + b;
console.log(add(1, add(2, 3)));
今回はconsole.logの引数はひとつだけなので
add(1, add(2, 3)) を評価する
const add = (a, b) => a + b;
console.log(add(1, add(2, 3)));
addの引数は2つあるので左から評価する
1 → 1(リテラルなのでそのまま)
add(2, 3) → 評価する
const add = (a, b) => a + b;
console.log(add(1, add(2, 3)));
addの引数は2つあるので左から評価する
2 → 2(リテラルなのでそのまま)
3 → 3(リテラルなのでそのまま)
add(2, 3)からadd(2, 3)が得られるので評価する
const add = (a, b) => a + b;
console.log(add(1, 5));
add(2, 3)を評価すると5になる
add(1, 5)が得られる
これを評価する
const add = (a, b) => a + b;
console.log(6);
add(1, 5)を評価して6が得られる
console.log(6)を評価する
const add = (a, b) => a + b;
undefined;
console.log(6)を評価する
コンソールに6が出力される
console.log自体は何も返さないのでundefinedに評価される
const x = ((a) => (b) => a + b)(1)(2);
const x = ((a) => (b) => a + b)(1)(2);
関数式
関数呼び出し式
const x = ((b) => 1 + b)(2);
関数式
関数呼び出し式
const x = ((a) => (b) => a + b)(1)(2);
const x = 3;
関数式
関数呼び出し式
const x = ((b) => 1 + b)(2);