お世話になります。
javascript
1 $(function(){ 2 testHoge(); 3 }); 4 { 5 let test = 99999; 6 function testHoge() { 7 alert(test); 8 }; 9 }
上記のjsがあるhtmlロード時に、android,pcではアラートが出力されるのですが、IOS13のipadではアラートが出力されません。
alert内の変数testを文字リテラルに変更すると動作する為、恐らくiosでのletの扱いが他のOSと違うのではないと予想しているのですが、参考になる文献が見つかりません。
letをvarに変更するしかないのでしょうか。
それともiosでは特別な実装が必要なのでしょうか。ご教示のほど、よろしくお願いいたします
以下追記
javascript
1 { 2 let test = 99999; 3 function testHoge() { 4 alert(test); 5 }; 6 } 7 $(function(){ 8 testHoge(); 9 });
上記としましても同じくiosで動作しませんでした
また、
javascript
1"use strict"; /* 追記 */ 2{ 3let test = 99999; 4function testHoge() { 5 alert(test); 6} 7$(function(){ 8 testHoge(); 9}); 10}
も動作しませんでした。
"use strict";
を追加すると上記でipadでも正常に動作するようになりました。
しかし、MDNに下記とある通り、
ブラウザはまだ strict モードを確実に実装していないため、無条件に依存しないでください。strict モードは意味を変えます。それら変更点を当てにすると、strict モードを実装していないブラウザでミスやエラーが発生する可能性があります。
この実装にするのは抵抗があります。
何かヒントになればと思い追記しました。
以下19/12/04 12:45追記
実装はmaisumakunさん、yambejpさんのような実装でよいと理解しました。回答ありがとうございます。
しかしMDNにある
strict モードは意味を変えます。
というのが引っ掛かります。iosではどのように意味が変わって正常に動作するようになったのでしょう?
上記の動作するコードで"use strict";
がない場合でもエラーにはなりませんでした。
そもそもstrictモードはMDNを読んだ私の理解では、生コードより文法を厳しくチェックするものという理解であり、上記の"use strict";
がある状態、ない状態で処理が分かれるということ自体にかなり疑問が残っています。
身勝手ではございますが、後学の為、ご教示願えますでしょうか。
以下追記
Eggpanさんの指摘が根本的な記載を見つける手掛かりになったということでそちらをベストアンサー致します。
詳しくはそちらのコメントをご覧ください。
回答ありがとうございました。
回答4件
あなたの回答
tips
プレビュー