# 【2024幎5月】JavaScript Primer 早朝茪読䌚🌅 tags: `JSPrimer🌅` - [開催抂芁](https://bootcamp.fjord.jp/regular_events/53) ※FBC内ペヌゞ - [HackMDたずめ](https://hackmd.io/NYIcQqMUSSqfEFd9rUG7fg) - [JavaScript Primer Web版トップ](https://jsprimer.net/) <hr/> ## 🗓 2024-5-4(土) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @sugiwe - ドラむバヌ: @yumiya ### 📙 読んだずころ - from - https://jsprimer.net/basic/string/#match-capture-by-regexp - to - https://jsprimer.net/basic/string/#tagged-template-function ### 次回 - https://jsprimer.net/basic/string/#tagged-template-function ### 📝 孊んだこず・感想・雑談 - @sugiwe - matchメ゜ッド、matchAllメ゜ッド、gフラグ、埩習しないず  - replaceメ゜ッドずreplaceAllメ゜ッドはなんかスッず入っおきた - JS、「今たではこうやっおいたけど ES20** でこんな䟿利なメ゜ッドができたした」っお話だらけで、実際どんどん䟿利になっおいるのだろうけど頭が远い぀かない 汗 - URLの正芏化、みたいな䟋はわかりやすくお面癜かった - 正芏衚珟っおナヌスケヌスをむメヌゞできないず党然ピンず来ないので、こういう䟋をもっず芋たい - ず思ったが、この䟋は説明のための䟋で、実際にURLを扱う堎合には自前でこねくり回さないでweb暙準APIの URL オブゞェクトを䜿ったり、ファむルパスを扱うなら Path モゞュヌルを䜿うなどした方が良いそう。 - GWはプラクティスをいっぱい進めるぞ〜😄 ず思ったたたほずんど進たずGW前半が終わった - haruguchi - 正芏衚珟っお䟿利だけど䜿い所難しい、そしおそんなに䜿い所ない - matchオブゞェクトはなんか色々いい感じのオブゞェクトになっおる - GWはあんたり予定がなくRubyKaigiの予習をしおたら終わりそう - 掻字䞭毒すぎお読むものないずき日報持っおるからなんかダメだw - @yumiya - `match`ず`matchAll`メ゜ッドは、マッチした結果を「配列」で返す - 正芏衚珟の`g`フラグを䜿う堎合、`matchAll`メ゜ッド - RegExpの`exec`メ゜ッドでも同じような結果になるが、`match`メ゜ッドず少し挙動が異なるので泚意 - 文字列取埗の䜿い分け - `String`メ゜ッドで衚珟できるこずは`String`メ゜ッドを䜿う - 柔軟性や曖昧な怜玢が必芁な堎合は、正芏衚珟を利甚する - 文字の組み立おで、URLやファむルパスを䜜る際にはURLオブゞェクトなどを䜿う - `+`挔算子で組み立おない - 䌌たような凊理の関数が増えおきたので、䜿い分け方を芚えおいきたい <hr/> ## 🗓 2024-5-5(日) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @karlely - ドラむバヌ: @sugiwe ### 📙 読んだずころ - from - https://jsprimer.net/basic/string/#tagged-template-function - to - https://jsprimer.net/basic/string-unicode/#regexp-unicode ### 次回 - https://jsprimer.net/basic/string-unicode/#count-of-code-points ### 📝 孊んだこず・感想・雑談 - @sugiwe - タグ぀きテンプレヌト関数`関数()`でなく関数``を䜿うず、関数の呌び出しに匏展開のようなこずができる - タグ぀きテンプレヌトリテラル、わかったようなわからないような、、、 - 絵文字や䞀郚の挢字は、2぀の Code Unit を䜿っお衚珟するので、`.length`で文字数をカりントするず2぀分になる - uフラグが぀いた正芏衚珟は、文字列をCode Pointごずに扱う - uフラグが無いず䞋䜍サロゲヌトだけがマッチしお文字化けしおしたうこずがある - 基本的にはuフラグを぀けおおいた方がいいっおこずかな - 䟋文を理解するにあたり、その章自䜓で説明されおいる郚分が理解できおいないのか、党然関係ないけどその䟋文に出おくる関数ずかがわかっおなくお党䜓がわからなくなっおいるのか、たずそこの敎理をしないずいけないなず思った。。。 - @karlley - タグ付きテンプレヌト関数は文字列をコンテキストに応じた凊理をいい感じにやっおくれる - コヌドポむントずコヌドナニットの違いがただフワッずしおいる - コヌドナニットで衚珟しきれないコヌドナニットを2぀のコヌドナニットで衚珟するのがコヌドポむントっおこず - 文字列はCode Unitが順番に䞊んだものずしお扱われる - String.lengthはこの個数を調べるメ゜ッド - 文字列はムズい... - @yumiya - [タグ぀きテンプレヌト関数](https://jsprimer.net/basic/string/#tagged-template-function)で、匕数内の特殊文字`&`,`%`,`$`,`日本語`などを゚スケヌプしおURLを生成できる - 文字には「䞀意のID」が振られおいお、このIDを**Code Point**笊号䜍眮ず呌ぶ - Stringの`codePointAt`メ゜ッドでコヌドポむントを返す - `String.fromCodePoint`メ゜ッドで、コヌドポむントに察応する文字を返す - Unicodeはコヌドポむントで返すが、JavaScriptの文字列はUTF-16で倉換されたCode Unit笊号単䜍になる - 絵文字などの扱いがCode PointずCode Unitで異なる - UTF-16では2぀のCode Unitの組み合わせ合蚈4バむトで1぀の文字1぀のCode Pointを衚珟し、サロゲヌトペアず呌ぶ - サロゲヌトペアで衚珟しおいる文字列は、䞊䜍サロゲヌト0番目ず䞋䜍サロゲヌト1番目を組み合わせる - 正芏衚珟を䜿う際には、uunicodeフラグを付けるほうが良さそう - Firefoxを䜿うず文字化け郚分にコヌドポむントが衚瀺されるよう - Chrome・Safari`console.log("𩞜"[0]);` => ◆の䞭に「」 - Firefox`console.log("𩞜"[0]);` => □の䞭に「D867」 <hr/> ## 🗓 2024-5-11(土) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @karlley - ドラむバヌ: @yumiya ### 📙 読んだずころ - from - https://jsprimer.net/basic/string-unicode/#count-of-code-points - to - https://jsprimer.net/basic/function-scope/#scope-chain ### 次回 - https://jsprimer.net/basic/function-scope/#global-scope ### 📝 孊んだこず・感想・雑談 - @sugiwe - 絵文字、ずいうか文字列ずUnicodeの関係は難しい  - `new String("文字列")`のようにStringオブゞェクトをnewしお䜜ったStringオブゞェクトのむンスタンスを、ラッパヌオブゞェクトず呌ぶ - ラッパヌオブゞェクトで䜜った `new String("文字列")`は`typeof`で`object`になるが、プリミティブ型で䜜った`"文字列"`は`typeof`で`string`になる。ややこしい、、、 - 最終的にラッパヌオブゞェクトはあんたり䜿わずに、普通のリテラルで曞く方が良いでしょうずのこずで、そうしようず思った - スコヌプチェヌン - OUTERブロックスコヌプで定矩した倉数はINNERブロックスコヌプで参照できるINNERを探しおあればそれを参照、なければOUTERを探しおそれを参照 - INNERブロックスコヌプで定矩した倉数はOUTERブロックスコヌプで参照できない - スコヌプチェヌンスコヌプの入れ子じゃなくおも、以䞋ずなる - ブロックの倖で定矩した倉数はブロックの䞭で参照できる - ブロックの䞭で定矩した倉数はブロックの倖で参照できない - @yumiya - 絵文字などサロゲヌトペアを含む文字列を`length`でカりントするず芋た目ずは異なる数倀が返っおくるので泚意したい🍎.length => 2 - Twitterのようにリアルタむムで入力した文字数をカりントする機胜など - プリミティブ型のデヌタには垞にリテラルを䜿うこずで、ラッパヌオブゞェクトを意識する必芁がなくなる - あえおラッパヌオブゞェクトにする必芁はなさそう - どういったケヌスでラッパヌオブゞェクトにするのか気になった - 同じスコヌプ内には同名の倉数を定矩できない - ただし`var`は䟋倖なので叀いコヌドを線集するずきに泚意したい - スコヌプがネストしおいる堎合、内偎のスコヌプから倖偎のスコヌプぞ倉数名を探玢しおいく - 「スコヌプチェヌン」ず呌ぶ - スコヌプは階局的な構造になっおいる - @karlley - ラッパヌオブゞェクトはプリミティブ型の倀をラップしたオブゞェクト - 型はオブゞェクト型 - プリミティブ型に察応したそれぞれのラッパヌオブゞェクトが存圚する - 䜿い所は䞍明... - 極力リテラル型を䜿った方が混乱を生たない - 関数定矩はスコヌプを䜜成しおいるのず同じ - 仮匕数: 関数定矩時に匕数に䜕が入るか分からないから「仮匕数」 - スコヌプチェヌン: 倉数の参照が内偎から倖偎に向かっお探玢される仕組み - ブロックの倖 -> 内はNG、ブロックの内 -> 倖はOK - for分などのルヌプ郚分は内 -> 倖の倉数を参照しおいる <hr/> ## 🗓 2024-5-12(日) 🏖お䌑み🏖 <hr/> ## 🗓 2024-5-18(土) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @sugiwe - ドラむバヌ: @genny ### 📙 読んだずころ - from - https://jsprimer.net/basic/function-scope/#global-scope - to - https://jsprimer.net/basic/function-scope/#dynamic-scope ### 次回 - https://jsprimer.net/basic/function-scope/#memory-management ### 📝 孊んだこず・感想・雑談 - @sugiwe - グロヌバル倉数はあらゆるスコヌプから参照できるが故に混乱の元にもなるので、無闇にグロヌバルスコヌプに倉数を定矩しない方が良さそう倉数を参照できる範囲はできるだけ小さく - varの巻き䞊げずいうのがある宣蚀の前に参照しおも゚ラヌにならず`unedefined`が返る - 新しく曞く際にはvarは䜿わない方が良さそう - 関数宣蚀も、同様に「巻き䞊げ」ずいうのがある。varの巻き䞊げは「なんだこれ」ず思ったけど、関数宣蚀の巻き䞊げはなぜか受け入れられた。 - 確かに - 即時実行関数、`()`を芋逃しおお蚳が分からなかったけど、なるほどず思った - クロヌゞャヌ、ピンず来なかったが、「ずある関数を耇数の倉数に代入したら、各倉数ごずに関数の䞭身の状態は保持されるよ」っおこずで、むンスタンスを䜜るっぜい感じのむメヌゞを持った。 - RubyKaigi勢は今日はグッスリ寝おいるでしょうか🛌 - @genny - スコヌプはできるだけ小さくする - var は特殊な動きをするので䜿わない - 宣蚀郚分が最も近い関数たたはグロヌバルスコヌプの先頭に巻き䞊げられ、代入郚分はそのたたの䜍眮に残る - クロヌゞャヌよくわからない  - 「クロヌゞャヌずは「倖偎のスコヌプにある倉数ぞの参照を保持できる」ずいう関数が持぀性質のこず」らしい - 関数が状態を持っおいるように振る舞える - JSもRubyも静的スコヌプ <hr/> ## 🗓 2024-5-19(日) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @sugiwe - ドラむバヌ: @gennyboy ### 📙 読んだずころ - from - https://jsprimer.net/basic/function-scope/#memory-management - to - https://jsprimer.net/basic/function-scope/#closure-usecase ### 次回 - https://jsprimer.net/basic/function-scope/#closure-vs-function-object ### 📝 孊んだこず・感想・雑談 - @sugiwe - ガベヌゞコレクションずは、参照されなくなった䞍芁なデヌタをメモリから自動で解攟する仕組み - 「関数の実行が終了した際に解攟される堎合」ず「関数の実行が終了しおも解攟されない堎合」の違いが初め党然ピンず来なかったけど、 kitarou888 さんの解説でかなり分かった - メモリの抂念を理解するこずがかなり重芁 - returnを持぀関数の結果を任意の倉数に代入しおおくず、「ずっず参照され続けおいる」状態になるので、メモリが解攟されない - 倉数aず倉数bにそれぞれ同じ関数の結果を代入したら、それぞれが別の状態を保぀こずになる。倉数bに倉数aを代入するず参照元が同じになる、ずいうのも実際に画面で確認できお面癜かった - React の関数コンポヌネントは、クロヌゞャヌを掻甚しおいるらしい。 - kitarou888 さんが海倖から参加しおくれお嬉しかった😄 - @kitarou888 - 実行埌にガベヌゞコレクションされる関数ずされない関数のちがい - returnをも぀こず - その返り倀をある倉数に代入しおいるこず - クロヌゞャヌは高階関数の䞀郚分ずしおも䜿われおいる - ぀たりmapなどはルヌプの郜床郚屋を぀くっおいるずいう理解でよい - 明日は䞖界遺産のプリトノィツェ湖矀囜立公園ぞ行っお参りたす <hr/> ## 🗓 2024-5-25(土) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @sugiwe - ドラむバヌ: @karlley ### 📙 読んだずころ - from - https://jsprimer.net/basic/function-scope/#closure-vs-function-object - to - https://jsprimer.net/basic/function-this/#method-this ### 次回 - https://jsprimer.net/basic/function-this/#this-problem ### 📝 孊んだこず・感想・雑談 - @sugiwe - クロヌゞャヌ、状態を持぀関数オブゞェクト、クラスに぀いお - 状態を持぀関数オブゞェクトは、関数の倖からプロパティを倉曎できちゃう。 - クロヌゞャヌを䜿えば倉曎できないように閉じ蟌めるこずができる - 倧抵はクラスでやれば良さそう - `globalThis`の䜿い所がただピンず来おない - Rubyではハッシュ内にメ゜ッドは曞けないけど、JSではオブゞェクト内にメ゜ッドを曞ける - thisは、プラクティスで「関数䜿うずきは基本arrow functionが良いけど、thisを䜿うずきだけ関数宣蚀関数匏を䜿おうね」みたいな話の時によく芋かけた。arrow functionに慣れおないのでっおか省略蚘法っぜいの党般が苊手でthis䜿えないならarrow function䜿わなくお良いじゃんっお思っおいる、、、 - ここら蟺はfunction䜿おう掟もいお論争がありそう - 最近、TypeScriptの本を読み始めおもReactの本を読み始めおもJSの基瀎が出おくるので、早くもっず慣れおいきたいず痛感しおいる、、、 - @haruguchi - thisがない䞖界を想像するずthis(self)の必芁性がわかるかも ```javascript! const person = { fullName: "Brendan Eich", age: ... gender: ... sayName: function() { return person.fullName; // this.fullName }, sayAge: function() { return person.age // this.age } sayGender: function() { return person.gender // this.gender } } // personじゃなくおuserにしたいず思った時、、、 ``` - クロヌゞャはレキシカルなスコヌプが関連するのでRubyのメ゜ッドはクロヌゞャじゃない。 - RubyKaigiで狂った生掻リズムを取り戻したい。運動習慣も - @karlley - jsのクラスはクラスもどき、クラスっぜい動きをするだけ - 匏ず文 - 匏: 倀なのでプロパティになる -> メ゜ッドにできる - 文: 倀ではないのでプロパテになれない -> メ゜ッドにできない - jsのオブゞェクトはrubyのハッシュずほが同じ - ベヌスオブゞェクトは`.` の巊偎のオブゞェクト -> this - 2週間ほど䌑んだのでだいぶ進んでいおびっくりしたし、関数のずこは参加したかった... - 他の蚀語ず察比しお読んでいくず少しだけ芚えたり理解しやすくなる気がした <hr/> ## 🗓 2024-5-26(日) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: @karlley - ドラむバヌ: @sugiwe ### 📙 読んだずころ - from - https://jsprimer.net/basic/function-this/#this-problem - to - https://jsprimer.net/basic/function-this/#arrow-function-callback ### 次回 - https://jsprimer.net/basic/function-this/#arrow-function-this ### 📝 孊んだこず・感想・雑談 - @sugiwe - this難しい - thisは、その関数メ゜ッドも含むが呌び出しのベヌスオブゞェクトを参照するが、いろいろな問題がある - thisを含むメ゜ッドを倉数に代入した堎合 - メ゜ッドをただの関数ずしお呌ぶず、ベヌスオブゞェクトが倉わっおいるので意図しない結果になる - call、apply、bindメ゜ッドで察凊できる - 基本的には、メ゜ッドずしお定矩されおいる関数はメ゜ッドずしお呌ぶ - コヌルバック関数ずthis - コヌルバック関数ずしお呌び出した関数にベヌスオブゞェクトがなく、undefinedになる - 察凊法ずしお、thisを䞀時倉数に代入する、ずいう手もある - Arrow Functionを䜿えば、thisが倖偎を探玢するこずになるので、その仕組みを掻甚できる - @karlley - メ゜ッドずしお定矩したものはメ゜ッドずしお呌び出す - メ゜ッドずしお定矩しおいるものを関数ずしお呌び出すずthisで参照できない問題が発生する - 察策: call, bind, applyを䜿う - コヌルバックでthisを䜿った関数を呌び出すずundefinedになる堎合がある - 察策: アロヌ関数を䜿う - ここたで読んでるずアロヌ関数を䜿えば党郚解決するんでしょず思っおしたうけど... 昚日ハルグチさんが蚀っおいたfunction掟もいるずいう話が逆に気になっおきた - @yumiya - 寝坊のため、20分遅れお参加したした😓 - 2週間ぶりの参加でした。もう「[関数ずthis](https://jsprimer.net/basic/function-this/)」の章に入っおいたのでキャッチアップが必芁👚🏻‍💻 - コヌルバック関数の䞭で`this`を参照するず問題が発生しやすい - よっおコヌルバック関数内で`this`を䜿う堎合はアロヌ関数を䜿うほうがよい - アロヌ関数で定矩したコヌルバック関数は、倖偎の関数の`this`をそのたた利甚する - アロヌ関数自䜓は`this`を持たない - `this`の内容がわからなくなったら、関数の䞭に`console.log(this);`を曞いおチェックしたほうがわかりやすいかも - 先週は[RubyKaigi2024](https://rubykaigi.org/2024/)に参加しおきたした❗いろいろな人ずお話できおずおも孊びになりたした✊🏻 - [講挔内容](https://rubykaigi.org/2024/schedule/)はたったくWakaran🀔ず思いながら聞いおたした。。 <hr/> ## 🗓 2024-6-1(土) ### 🧑🏻‍💻 ファシリ/ドラむバヌ - ファシリ: karlley - ドラむバヌ: yumiya ### 📙 読んだずころ - from - https://jsprimer.net/basic/function-this/#arrow-function-this - to - https://jsprimer.net/basic/class/#class-declaration ### 次回 - https://jsprimer.net/basic/class/#class-instance ### 📝 孊んだこず・感想・雑談 - @karlley - thisムズい... ずりあえずこれだけ芚える - arrow function: 䞀番近い倖偎のthis、thisは固定(静的に決たる) - function: ベヌスオブゞェクトがthis、thisは呌び出し方で倉わる(動的) - メ゜ッドの省略蚘法: `const obj = { fn(){凊理} }` - クラスはオブゞェクトの䞀皮(特別なものではないむメヌゞ) - use strictを䜿うずトップレベルのオブゞェクトが参照できないのはなぜ - 䜿い方を間違わせないようにしおいる仕様 - thisずしお参照する䜿い道がない - セキュリティ面もある - haruguchi - this難しくないよ - 1. アロヌ関数以倖の堎合 - fn() だずベヌスオブゞェクトないからトップレベルのthisが参照 - xxx.fn() だずベヌスオブゞェクトあるからベヌスオブゞェクト(xxx)がthis - ぀たり呌び出し方によっおthisが決たる(動的にthisが決たる) - 2. アロヌ関数の堎合 - 関数自䜓はthisを持たないのでアロヌ関数を定矩した倖偎のスコヌプぞずthisを参照しおいく - ぀たり定矩したスコヌプによる(静的にthisが決たる) - これだけ理解したら9割は倧䞈倫。入れ子になるずややこしいけどね。 - あずmapみたいに甚意されおいる関数はthisよくわからなくなる。芪切だずドキュメントに曞いおあったりする。曞いおなかったら自分で゜ヌスコヌド芋ないずいけない。が、基本的に意識しないで良いような䜜りにしおくれおいるはず、、、はず。 - yumiya - 埩習ができおいなかったので、今回の章の内容はなかなか理解できなかった😓 - `use strict`の有無で`this`の定矩が倉わる堎合がある - > strict modeではない状況でthisがundefinedの堎合は、thisがグロヌバルオブゞェクトを参照するように倉換される問題があるためです。 - アロヌ関数自身は`this`を持たない参照[察凊法: Arrow Functionでコヌルバック関数を扱う](https://jsprimer.net/basic/function-this/#arrow-function-callback) - よっお「自身の倖偎のスコヌプに定矩されたもっずも近い関数のthisの倀」を取る - アロヌ関数でコヌルバック関数を定矩するず、`this`を䞀時倉数に代入しなくおよくなる - メ゜ッドの省略蚘法参照[メ゜ッドの皮類](https://jsprimer.net/basic/function-this/#type-of-method) - const obj = { fn(){凊理} }