質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

369閲覧

1行目の実行文を最終行目に持ってくる理由

skillUp

総合スコア25

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2022/09/25 06:52

前提

画面内で「a」「s」「d」「f」「g」「h」などのキーを押すたびに
ブラウザコンソールにpropertyNameである「box-shadow」が表示されます。

疑問に思うこと

window.addEventListener から始まる1行目を最終行に持っていくことも可能です。
他の人のソースを見ていても
最初のfunctionなどの命令実行文を
1行目ではなく最終行目にあるのを見かけることがありますが
どういう理由からなのか教えていただけませんでしょうか。

また、this.classList.remove("active"); のthisに型を指定する記述を行う場合
どう付けるのが適切でしょうか。

Typescript

1 2window.addEventListener('keydown', playSound); 3function playSound(e){ 4 const sound = document.querySelector(`audio[data-key="${e.key}"]`); 5 const key = document.querySelector(`.key[data-key="${e.key}"]`)!; 6 7 if(!key) return; 8 (sound as HTMLAudioElement).currentTime = 0; 9 (sound as HTMLAudioElement).play(); 10 key.classList.add("active"); 11} 12 13function removeTransition(e:any){ 14 if(e.propertyName !== 'box-shadow') return; 15 this.classList.remove("active"); 16 console.log(e.propertyName); 17 } 18 19 const keys = document.querySelectorAll('.key'); 20 keys.forEach(key => key.addEventListener('transitionend', removeTransition)); 21 22

HTML

1 2<div class="sound_frame"> 3 <div data-key="a" class="key"> 4 <kbd>A</kbd> 5 <span class="sound">ベース</span> 6 </div> 7 <div data-key="s" class="key"> 8 <kbd>S</kbd> 9 <span class="sound">ドラム</span> 10 </div> 11 <div data-key="d" class="key"> 12 <kbd>D</kbd> 13 <span class="sound">ギター1</span> 14 </div> 15 <div data-key="f" class="key"> 16 <kbd>F</kbd> 17 <span class="sound">ギター2</span> 18 </div> 19 <div data-key="g" class="key"> 20 <kbd>G</kbd> 21 <span class="sound">ピアノ1</span> 22 </div> 23 <div data-key="h" class="key"> 24 <kbd>H</kbd> 25 <span class="sound">ピアノ2</span> 26 </div> 27</div> 28 29<audio data-key="a" src="sounds/bass01.wav"></audio> 30<audio data-key="s" src="sounds/drum01.wav"></audio> 31<audio data-key="d" src="sounds/guitar01.wav"></audio> 32<audio data-key="f" src="sounds/guitar02.wav"></audio> 33<audio data-key="g" src="sounds/piano01.wav"></audio> 34<audio data-key="h" src="sounds/piano02.wav"></audio> 35

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最初のfunctionなどの命令実行文を
1行目ではなく最終行目にあるのを見かけることがありますが
どういう理由からなのか教えていただけませんでしょうか。

すぐに思いつくのは、そのコードを書いた人がその順番で書いた方が読みやすいと思ったから、という理由です。コードの読みやすいさには主観が入ってきますので、「たとえ 関数宣言によって定義された関数でも、宣言の前に使うのはキモチワルイ」と思う人もいるでしょうし、逆に、「関数宣言はすべて下にして、関数の実行が先に書かれているほうが読みやすい(のだから、関数宣言の巻き上げを使わない手はない。)」という人もいるでしょう。

また、this.classList.remove("active"); のthisに型を指定する記述を行う場合
どう付けるのが適切でしょうか。

関数removeTransitionの先頭引数にthisパラメータを追加して、こうするとよいかと思います。

diff

1- function removeTransition(e: any) { 2+ function removeTransition(this: Element, e: any) {

投稿2022/09/25 08:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skillUp

2022/09/25 16:03

やはり主観によって異なるだけなんですね。 もっと意味があるのかと疑問でした。 thisの型指定は引数に そういうことも可能なのですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問