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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

2回答

473閲覧

unde fined?(htmlエラー(?))

ibuki_rei

総合スコア95

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2022/08/11 11:30

前提

ICTコンクールにだす用のタイピングwebでスコアのシステムを作っていたら、アラートで表示させたら『unde fined』(未定義)と出てきました

該当のソースコード

一部抜粋(割愛で♡)

JavaScript

1var a; 2 let Q = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];//問題文 追加すること 3 let Q_No = Math.floor( Math.random() * Q.length);//問題をランダムで出題する 4 5 let Q_i = 0;//回答初期値・現在単語どこまで合っているか判定している文字番号 6 let Q_l = Q[Q_No].length;//計算用の文字の長さ 7 8 9window.addEventListener("keydown", push_Keydown); 10 11function push_Keydown(event){ 12 13 let keyCode = event.key; 14 if (Q_l == Q_l-Q_i){ 15 16 document.getElementById("start").innerHTML = Q[Q_No].substring(Q_i, Q_l); //問題を書き出す 17 18 19 } 20 21 22 if (Q[Q_No].charAt(Q_i) == keyCode) { //押したキーが合っていたら 23 24 Q_i++; //判定する文章に1足す 25 document.getElementById("start").innerHTML = Q[Q_No].substring(Q_i, Q_l); //問題を書き出す 26 27 if (Q_l-Q_i === 0){ //全部正解したら 28 29 30 Q_No = Math.floor( Math.random() * Q.length);//問題をランダムで出題する 31 Q_i = 0;//回答初期値・現在どこまで合っているか判定している文字番号 32 Q_l = Q[Q_No].length;//計算用の文字の長さ 33 34 swal('nice') 35 var a = a+1; 36 37 38 document.getElementById("start").innerHTML = Q[Q_No].substring(Q_i, Q_l); //新たな問題を書き出す 39 40 } 41 } 42} 43 44function score() { 45 alert(a); 46 } //関数で処理分け 47

補足情報(FW/ツールのバージョンなど)

あらーとで変数aを出しています
CodePenでデバックしてもエラーは出ませんでしたなぜでしょう
CodPen

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

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

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

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

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

guest

回答2

0

ベストアンサー

本来ならクロージャで関数の外側の変数aにもアクセスできるはずですが、
push_Keydownの中で新たに変数aをvarで定義しなおしてしまっているので外側のaとは同名の別変数になってしまっています。
しかも初期値を設定していない(undefinedの)まま足し算をしているのでpush_Keydownのvar aからvarを消しても結果はNaNです。

push_Keydownのvar a = a+1;からvarを消して最初の行のaに0を代入してください。

投稿2022/08/11 12:55

RiaFeed

総合スコア2701

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

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

ibuki_rei

2022/08/12 12:05

でも push_keydownから消してしまうと正解したときにa+1する処理ができないのでまあvar a=0;はpush_keydown外に書くけどね...
RiaFeed

2022/08/12 12:50

できますけど・・・???
ibuki_rei

2022/08/13 04:57

???コードを書いてくれるとありがたいです
RiaFeed

2022/08/13 07:20

https://codepen.io/riafeed/pen/zYWmxBP 質問にあるcodepenのコードから「最初から回答に書いた通り」push_Keydown内のvar a = a + 1からvarを消し、外のvar aに=0を代入し、 これは書いていないけどどこにも定義されてない関数の呼び出しなのでエラーになるswal('nice')をコメントアウトしたら 「今のスコア表示」ボタンでaの値が表示されますよ???
ibuki_rei

2022/08/13 07:47

ありがとうございます!!マジでありがとうございます!!
guest

0

あらーとで変数aを出しています

JavaScriptの変数は関数スコープを持ちますので、push_Keydown内のaと、外側のaは同名なだけの別変数です。scoreが参照するaは外側のもので、これは一切書き変わらないのでundefinedのままです。

投稿2022/08/11 11:52

maisumakun

総合スコア145183

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

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

ibuki_rei

2022/08/12 12:02

対処法を教えていただければ幸いです
maisumakun

2022/08/12 12:04

どのような結果を得たいのですか?
ibuki_rei

2022/08/13 05:08

得たい結果はCode Pen を見てもらうとわかるんですけど if (Q_l-Q_i === 0){ のときに変数aを+1して function score() { alert(a); } でaを出力 したいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問