質問: 99999; function testHoge() { alert(test); } $(function(){ testHoge(); }); } ``` ~~も動作しませんでした。~~ `"use strict";`を追加すると上記でipadでも正常に動作するようになりました。 しかし、MDNに下記とある通り、 > > ブラウザはまだ strict モードを確実に実装していないため、無条件に依存しないでください。strict モードは意味を変えます。それら変更点を当てにすると、strict モードを実装していないブラウザでミスやエラーが発生する可能性があります。 > > > この実装にするのは抵抗があります。 何かヒントになればと思い追記しました。 以下19/12/04 12:45追記 実装はmaisumakunさん、yambejpさんのような実装でよいと理解しました。回答ありがとうございます。 しかしMDNにある > > strict モードは意味を変えます。 > > > というのが引っ掛かります。iosではどのように意味が変わって正常に動作するようになったのでしょう? 上記の動作するコードで`"use strict";` がない場合でもエラーにはなりませんでした。 そもそもstrictモードはMDNを読んだ私の理解では、生コードより文法を厳しくチェックするものという理解であり、上記の`"use strict";`がある状態、ない状態で処理が分かれるということ自体にかなり疑問が残っています。 身勝手ではございますが、後学の為、ご教示願えますでしょうか。 以下追記 Eggpanさんの指摘が根本的な記載を見つける手掛かりになったということでそちらをベストアンサー致します。 詳しくはそちらのコメントをご覧ください。 回答ありがとうございました。
回答: おそらくですがStrictモードをつける/つけないで内部的には JavaScriptを変換するインタプリタ自体が異なるのだと思います。 つまりStrictモードでない場合にブラウザ内で使われるインタプリタで 該当ソースコードを解釈すると何かしら意図しないバグを生んでしまうが、 Strictモードであればちゃんと意図した動作をするように解釈してくれる...ということかなと。 具体的にソースコードのどの箇所がバグの原因になるのかはちょっとわからないです、すみません。 ただ変数に入る値の型の違いで動作が変わったり、そもそもalertが出なくなるというのは 本来のJavaScriptの仕様とは異なるはずなので、こういった状況を回避するためにstrictモードが 追加されたということでもあるのかなと思います。