🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
クラッシュ

クラッシュ(crash)はプログラムを完全に停止させてしまう修復不可能なエラー結果を指します。

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

2666閲覧

このコードだと、クラッシュしませんか?

taiyakix

総合スコア427

クラッシュ

クラッシュ(crash)はプログラムを完全に停止させてしまう修復不可能なエラー結果を指します。

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

3グッド

0クリップ

投稿2020/01/03 09:06

編集2020/01/04 00:17

このコードを書きました。ファイルに保存して、Chromeで開いたんですけど、メモリーは使い尽くされましたが、クラッシュにはいかなかったほか、ずっと、ローディングマークが表示されたままで、<h1>に書いた内容が表示されませんでした。

html

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <title>OMG...</title> 6</head> 7<body> 8 <script> 9 for (let number=1; number >= 0; number ++;) { 10 console.log(number) 11 } 12 </script> 13 <h1>OMG...</h1> 14</body> 15</html>

追記済み
m.ts10806さんのコメントに対して適当に返したこと。申し訳ありませんでした。そして、2件もの回答をもらったほか、1件の高評価もいただいていること、大変ありがたく思っています。

上記のコードでクラッシュしない理由が知りたい

初出の質問内容を訂正し、ぼくが知りたいのはなぜ上記のコードではクラッシュしないのかです。
ぼくが知りたいのは上記のコードでクラッシュしない理由です。Chrome,Safari,Braveではクラッシュに至りませんでした。
その理由が知りたいです。webブラウザーにはそのようなクラッシュを引き止める機能を持っているのでしょうか。

追記

クラッシュ...強制終了しないとアプリが閉じなかったり、webブラウザー上で他のタブに移動できなくなったり、別のアプリに切り替えられなくなったりすることをイメージしていました。

初出でその後削除した質問文の内容

1. ローディングマークを表示させないためにはどうすれば良いか。

2. 内容を素早く表示するにはどうすれば良いか。
上記2点についてご存知の方はいらっしゃいますでしょうか。

gizmodo, ai_2013_dev, BluOxy👍を押しています

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

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

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

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

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

m.ts10806

2020/01/03 09:12

作業依頼ではないけど、回答を得てどうしたいのか分かりません。 「問題・課題」を明確にしてください。 それに単なる無限ループを「素早く」と言われても誰もが困るのでは。
taiyakix

2020/01/03 09:17

低評価を稼いじゃいましたね。ごめんなさい。正直バッシングされると思ってました。
m.ts10806

2020/01/03 09:18

低評価はバッシングと思っていいんでは。 コメントしなくても低評価理由は明らかなので誰も表立って書かないだけでは。
taiyakix

2020/01/04 00:14 編集

悪かったです。
m.ts10806

2020/01/03 09:29 編集

と思うならそそくさと解決済みにするのではなく、きちんと議論しましょう。 展開次第で良質問となる可能性もあるのを潰してしまってはあなたの成長の可能性を自ら潰していることになります。 折角質問に高評価つけてくれてる人がいるのに。
m.ts10806

2020/01/03 09:27

せめて「何がしたいがために組んだコードなのか」目的や要件がもっと具体的であれば良いのですけど。 それもする気がないのでしたら今後あなたは成長しないと思います。
taiyakix

2020/01/03 10:21

m.tsさんぞんざいなコメントごめんなさい。 質問訂正して、ベストアンサーも外しました。
m.ts10806

2020/01/03 10:23

できればユーザー名は正確に(コピペで)やってもらったほうが。 現在は存在しないですけど、だから略していいというわけではないので。
m.ts10806

2020/01/03 10:24 編集

強いてなら「あなたが考えるクラッシュってどういう状況?」ということも具体的に記載いただきたいですね。無限ループも考えようによってはクラッシュです。
taiyakix

2020/01/03 10:29

訂正しました。クラッシュの定義は...コンピューターが故障することを指すんですね...
m.ts10806

2020/01/03 10:31

いいえ。「ブラウザが」と書けば「ブラウザクラッシュ」のことになります。 むかーし、JavaScriptで小ウィンドウ無限に開いてフリーズさせる「ブラウザクラッシャー」というのが流行ったことがあります(もちろん悪い行為です)
taiyakix

2020/01/03 10:37

無知を晒してすいません。それどこかで見たことがあるような。
m.ts10806

2020/01/03 10:45

いちいち卑下しない方が良いです。あまり気持ちのいいものではありません。
guest

回答4

0

クラッシュしない理由

上記のコードでクラッシュしない理由が知りたい

SyntaxErrorが発生し、コードが実行されていないからです。

JavaScript

1for (let number=1; number >= 0; number ++;) { // SyntaxError: Unexpected token ';'

ローカルファイルSS

codepenではsyntax errorのみが発生しました。

同じく、SyntaxErrorのみ出力し、console,log() では出力されませんでした。

Codepen SS

コンソール

コンソールを確認しましょう。

Re: taiyakix さん

投稿2020/01/03 11:08

編集2020/01/04 05:23
think49

総合スコア18189

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

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

taiyakix

2020/01/03 11:40

なるほど。9万行目あたりでストップしてsyntax errorと出てきたのはそういう意味だったのか
think49

2020/01/03 12:04 編集

> 9万行目あたりでストップしてsyntax errorと出てきたのはそういう意味だったのか 9行目です。 15行のコードに対して、「9万行目」が出てくるのには違和感があります。 「あたり」もおかしいのですが、何か感覚的に捉えられるものがあったのでしょうか。 状況を正確に把握し、間違いのない文章を書くよう気をつけたほうが良いです。
taiyakix

2020/01/03 12:39

すいません。9万行目あたりというのは、記載したコードのconsole.logが吐き出した数字が9万,10万になったあたりでエラーになったということです。
think49

2020/01/04 01:43 編集

> 9万行目あたりというのは、記載したコードのconsole.logが吐き出した数字が9万,10万になったあたりでエラーになったということです。 回答に書いた通り、SyntaxErrorが発生したコードは実行されません。 実行されませんので、「console.logが吐き出した数字が9万,10万」という状況は絶対にありえません。 事実、私の環境ではSyntaxErrorのみ発生しています。 https://teratail-v2.storage.googleapis.com/uploads/contributed_images/2c025eef7e52e0a5596b9b1bfb42bd20.png taiyakix さんの環境ではconsole.logで出力されるのは、「taiyakix さんが確認しているコード」と「質問文に書いたコード」が別物だからです。 そもそも、SyntaxErrorはコード全体が実行されないので、途中までコードが実行される状況はありえません。 script要素ごとに文法チェックしているので、script要素が複数存在したり、new Functionでコードを実行していたら有り得ますが、そんな状況はこの質問から判断しようがないですね。 2回目のベストアンサーを選んだ基準に矛盾を感じていましたが、おそらく偶然、「taiyakix さんが確認しているコード」にマッチした回答だったのでしょう。 「質問文に書いてない事実」や「質問文が誤りで全くの別物を想定している事」を回答者に想像させて憶測で回答させるのは、お互いに不幸になる質問だと思います。 あなたが遭遇している状況が質問文だけで「再現できること」を確認してから質問を投稿してください。 https://ja.stackoverflow.com/help/minimal-reproducible-example
taiyakix

2020/01/04 02:05

codepenではsyntax errorのみが発生しました。ただ、質問文に書いたコードのみのファイルをchromeで開いた場合、syntax errorのみではなく、console.logによって数字が吐き出されました。これは僕の誤解なのかもしれません。ただ、AkitoshiManabeさんの回答が個人的に良かっただけですから、think49の回答にベストアンサーをつけることはなく、矛盾もしていませんので。
think49

2020/01/04 02:32

> codepenではsyntax errorのみが発生しました。 それは質問文に書かれていますか。 > ただ、質問文に書いたコードのみのファイルをchromeで開いた場合、syntax errorのみではなく、console.logによって数字が吐き出されました。 @taiyakixの状況が再現できません。 ;を削除して、SumtaxErrorを取り除いても、SyntaxErrorで停止することはありませんでした。 文法に問題がない状況でSyntaxErrorが発生するのなら、それはGoogle Chromeのバグなので、Googleに報告すべき問題です。 > ただ、AkitoshiManabeさんの回答が個人的に良かっただけですから、think49の回答にベストアンサーをつけることはなく、矛盾もしていませんので。 私をベストアンサーに選ばなかったことを咎めているのではありません。 --- To: 低評価した方へ 低評価理由を教えてください。
退会済みユーザー

退会済みユーザー

2020/01/04 03:06

SyntaxError でも動くって書いてあったんで興味持ったんですけど、chrome/firefox ともに止まっちゃいますね。まぁ、当然ちゃ当然ですけど。。。 メッセージに違いがあって、ちょっと面白かったです。 > taiyakix さん 再現できる環境を丁寧に教えてもらえますか? 提示されたコードをそのまま utf-8 で保存し、ブラウザにドラッグ/ドロップしただけでは SyntaxError で止まってしまいました。 chrome(79.0.3945.88(Official Build) (32 ビット)) Uncaught SyntaxError: Unexpected token ';' firefox(71.0 (32 ビット)) SyntaxError: missing ) after for-loop control
AkitoshiManabe

2020/01/04 05:32

コード上の指摘としては、think49 さんの回答こそが正解ですよね。 for の括弧内は私も見落としてましたし、te2ji さんに指摘されるような回答にもなっていました。
guest

0

こんにちは、taiyakixさん

質問拝見しました。
結論から言いますと、ご質問のコードをchromeで実行すると、ローディングが続くまたはタブがクラッシュするのどちらかとなり、h1が表示されることはないです。

for (let number=1; number >= 0; number ++;) { console.log(number) }

上記は

  • numberが1から開始し
  • numberが0以上の場合
  • numberに1を足す

を繰り返すことになりますので、for文が終了せずに、無限ループになります。
例えば、

for (let number = 0; number < 5; number++) { console.log(number); }

のようにすれば、ループが正常に終了し、h1タグの内容が表示されると思います。

以上、参考になれば幸いです。

投稿2020/01/03 09:24

gentamura

総合スコア406

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

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

taiyakix

2020/01/03 10:06

その...それぐらいは...わかっていて...
m.ts10806

2020/01/03 10:21

そこもきちんと書かないと分からないことは分かってますかね。。。 この回答に低評価はさすがに厳しすぎますね。 編集前の質問からすると的外れではないです。
taiyakix

2020/01/03 10:25

ごめんなさい。高評価にしました。確かに、あの質問文だとこの回答になるのが普通ですよね。大変ありがたい回答でした。
m.ts10806

2020/01/03 10:28

なので、できれば元の質問文は残しておいてください。 でないと頓珍漢な回答がついた印象になってしまいます。 回答がついた質問の編集は慎重にしてくださいね。
guest

0

ベストアンサー

webブラウザーにはそのようなクラッシュを引き止める機能を持っているのでしょうか

ブラウザのソースは読んだことがないのですが、
モダンブラウザの挙動を見る限り、できるだけクラッシュを防止するような機能は持ってるみたいですね。


ご質問のような「無限ループ」だけでなく、延々と「再帰処理」してしまうコードを書くと、エラーを投げて止まる(あるいはクラッシュレポータのような画面に切り替わる)ことが多いです。

ただし、ブラウザの機能も過信はできません。

  1. 長期間の利用でメモリモジュールの一部が補正も効かない損傷を抱ていながら利用継続している例
  2. 元々搭載メモリの少ないシングルボードコンピュータを利用している例

このようなケースでは簡単にフリーズし、追記でイメージされている通りのことが起こります。

いずれも、ハードウェア要因が大きいのですが、「タスクマネージャからプロセスを強制終了できればまだマシ」という環境の閲覧者もいますので、無限ループや無限再帰は避ける必要があります。

追記)
コメント欄にて、より正確な理由をご指摘いただきました

無限ループや再帰処理自体が問題ではなく、無限ループ等によってリソースが消費され尽くしてしまうことが問題

投稿2020/01/03 11:04

編集2020/01/04 05:16
AkitoshiManabe

総合スコア5434

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

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

taiyakix

2020/01/03 11:41

なるほどです。弱いスペックで閲覧している人のことも考えろ、と。
AkitoshiManabe

2020/01/03 11:52

端的に言うとそうですね。 世の中を見渡すと、ITに関心のある人ばかりでもありませんし、逆に、Linuxを学ぶのに手軽なマシンがシングルボードコンピュータだったりします。
taiyakix

2020/01/04 00:19 編集

昔、使っていたノートPCはLinuxでしたがメモリー1GBでしたよ
AkitoshiManabe

2020/01/03 12:13

1GBだと、ブラウザのタブを10個も開くと普通のサイトの閲覧でもフリーズしやすいです。 シングルボードコンピュータの例では、RaspberryPi 3以前のモデルも1GBです。 今回のご質問は、追記による後出しジャンケンのような本質の問いかけでしたので 一呼吸、二呼吸を置いて投稿されるといいですよ。
taiyakix

2020/01/03 12:40

そうですね。3時間近く振り回されてました。
退会済みユーザー

退会済みユーザー

2020/01/04 03:23

無限ループや再帰処理自体が問題ではなく、無限ループ等によってリソースが消費され尽くしてしまうことが問題なので、もう少し回答を整理する必要があると思います。 適切に管理された無限ループ等は全く問題ありません。
AkitoshiManabe

2020/01/04 05:14

> もう少し回答を整理する必要があると思います。 ご指摘ありがとうございます。回答のほうを編集させていただきます。
guest

0

無限ループにならないようにしましょう

投稿2020/01/03 09:13

kyoya0819

総合スコア10429

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

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

m.ts10806

2020/01/03 09:17

回答も割としてる質問者が無限ループに気づいてないとは思いたくなかったですが 質問内容からするとそう突っ込むしかないですよねー
kyoya0819

2020/01/03 09:19

これ以外の回答が特に思いつきませんでした。
m.ts10806

2020/01/03 09:20

これで解決と言うのも面白くないですね。濁して逃げたみたいで。 もっと議論が白熱すると思ってました(そのほうがナレッジとしては良い傾向となるはずなのに)
taiyakix

2020/01/04 00:19 編集

質問文訂正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問