JavaScriptでコードにエラーがあるときそのファイルが読まれませんが、「読まれなかった」時点で検知するにはどうしたらいいのでしょうか?
実行内容とエラー
ブラウザでこう実行すると
JavaScript
1hoge('apple');
こちらの defined のエラーになりました。
JavaScript
1caught ReferenceError: hoge is not defined
試したこと
開発ツールでHTMLを見てもきちんとこう書かれておりました。
html
1 <script src="https://example.com/hoge.js"></script> 2</body>
さらにブラウザのURLバーにhttps://example.com/hoge.jsを入力すると、問題なくこれが表示されました。
JavaScript
1function hoge(fruits){ 2 const fruits = 'lemon'; 3 console.log('hoge!'); 4}
生じた疑問
「え?ファイルが存在していて、読めているのに、じゃなんで defined のエラーなのか?」と、ハマってしまったのです。
原因
その原因が今になって「どうやら hoge() 内で引数名と同名を const していたせいで「読まれなかったのか…」と分かったわけです。
質問
そもそもコンソールで「読まれなかった」という警告などを表示してくれればいいのになぁ。と悔しい思いです。
改めまして、以上のような経緯で「読まれなかった」時点で検知するにはどうしたらいいのでしょうか?
> JavaScriptでコードにエラーがあるときそのファイルが読まれませんが、
とは、何のことを言ってますか?
<script href="https://example.com/hoge.js"></script>
のようにファイルを読むHTMLタグにエラーがあってファイルが読まれないことを言っているわけじゃ無さそうです。
しかし、質問のコードのように、
<script src="https://example.com/hoge.js"></script>
と正しく書いてあれば、ファイルが存在する限り、必ず読まれます。
hoge.js の中味にエラーがある場合は、hoge.jsのファイルを読んだ後でエラーが検知されます。その結果、開発者ツールのコンソールタブにエラーメッセージが表示されます。
> hoge('apple');
上記をどこに書いてるんでしょうか。
そもそもその定義だとfruits が重複してエラーになります。
SyntaxError: Identifier 'fruits' has already been declared
通常.jsは読み込み時に文法エラーがあれば、そこで読み込みは中止になり、エラー内容がブラウザのコンソールに出力され、通常後からでも表示できると思います(正確なブラウザの種類・バージョン次第ですが)。
それが出力されていない以上、今の質問内容のままでは質問自体に疑いの目を向けるしかありません。
こんな想定をすること自体がナンセンスですが(質問者がその可能性をチェックし、除外できないといけない)、今回のケースは恐らく古いキャッシュに残ったhoge.jsが読み込まれ、そこにはhoge()がなかったのではないかと推測します。.jsなどの静的ファイルはブラウザキャッシュなどに残りやすく、長期間変更されていないとサーバー側で変更してもサーバー設定などによっては更新チェックすらされずにキャッシュを使う場合があります。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Cache-Control
いずれにしても、再現性その他ご自身でよくよく検証された方がいいかと思います。
質問者さん、無言ですが、いくつか回答が出ているのでそれらに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。解決したなら解決に役立った回答にベストアンサーをつけてクローズしてください。とにかく無言は NG です。