プロが教えるわが家の防犯対策術!

JavaScriptの初心者です。
笑われるかも知れません(多分そんな初歩的な事と笑われそうです)が次のようなリストで思った通りに動かず悩んでいます。
途中、window.alert を挟んでいるのはプログラムの状態を見るためです。
fnc03()の window.alert("fnc03"); までは思った通りに動くのですが、そのあとの処理に入るとエラーを起こすようで、処理が止ってしまうようです。
この原因をお教え願えませんでしょうか?
よろしくお願いします。

/************************************************
var c = document.getElementById('canvas');
var cnt = c.getContext('2d');

function init(){
window.alert("Start");
fnc01();
fnc02();
fnc03();
}

function fnc01(){
window.alert("fnc01");
}

function fnc02(){
window.alert("fnc02");
}

function fnc03(){
window.alert("fnc03");

cnt.strokeStyle = 'yellow'; //線の色
cnt.lineWidth = 5;
//円を描く
cnt.arc(50,50,20,0,2*Math.PI);
cnt.stroke();
}


*************************************************/

質問者からの補足コメント

  • この「問題なし」に引っかかてしまいました。

    「変数のスコープの問題?」の補足画像1
      補足日時:2022/06/23 10:26
  • 言葉足らずの質問で申し訳ありませんでした。
    冒頭の2行は元々 fnc03() の中にあったものです。
    fnc03() の中で宣言している場合はエラーが起こらず、キャンバスに円が描かれ期待通りに動いたのですが、他の関数でも使いたくて外に出した途端にエラーになりました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/06/23 10:40

A 回答 (3件)

No2です。



>fnc03() の中で宣言している場合はエラーが起こらず~
>他の関数でも使いたくて外に出した途端にエラーになりました。
であるなら、実行のタイミングの問題でしょう。
HTMLがパースされる以前にスクリプトを実行して、id="canvas"の要素が取得できないと思われます。

No2にも記しましたが、<script>タグが<canvas>タグよりも後に位置するようにしてみてください。
    • good
    • 1
この回答へのお礼

何度もご回答頂きありがとうございます。
お教え頂いた通りでした。
エラーメッセージも
Uncaught TypeError: Cannot read properties of null (reading 'getContext')
at my_only2.js:2:14
となっていてヌルのプロパティは存在しないということですね?
何故なのか考えているところでこのご回答を頂きました。

スクリプトの位置!これは本当に良いことを教えて頂きました。
<canvas>タグよりも後に、持ってきたらすんなりと成功しました。
本当にありがとうございました。

お礼日時:2022/06/23 11:05

こんにちは



>~~までは思った通りに動くのですが、
スクリプトしかご提示がないので、どうやって実行しているのかすら不明ですけれど・・
HTMLタグ内のonload属性や、ボタンのクリック等で実行しているのでしょうか?

不明部分が多いので、以下は、全くの妄想ですが・・・
最初の1行目で失敗しているのでは?

原因としてありそうなのは、
1)<canvas id="camvas"></canvas> の要素が無いか、idが設定されていない。
2)id="canvas"の要素が複数存在する。
3)HTMLパース前に、スクリプトを実行している。
などでしょうか?

3)が一番怪しそうな気がしますが、スクリプトタグを</body>直前に置くことで、動作したりしませんか?
この回答への補足あり
    • good
    • 1
この回答へのお礼

デベロッパーツールのエラーメッセージに基づいて今からもう一度見直しをします。
これからもどうぞよろしくお願いします。
ご回答ありがとうございました。

お礼日時:2022/06/23 10:41

エラーを起こしたならば、先ずはエラー文言を調べましょう。


ほとんどの場合で原因をそのまま教えてくれます。

参考)
https://developer.chrome.com/docs/devtools/conso …
https://firefox-source-docs.mozilla.org/devtools …
https://docs.microsoft.com/ja-jp/microsoft-edge/ …
    • good
    • 1
この回答へのお礼

おっしゃる通りですね。
実はデベロッパーツールを使い慣れていなくて補足に上げました画像の「問題なし」に引っかかってしまいました。
ずり下げて行きますと出てきました、エラーメッセージが!
エラーがあると必ずエラーメッセージが出るのですね。
以後気を付けます。
ご回答頂きありがとうございました。

お礼日時:2022/06/23 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!