質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

Q&A

解決済

5回答

882閲覧

配列と繰り返し処理について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2018/10/22 03:18

編集2018/10/22 03:28
const characters = [ {name: "にんじゃわんこ", age: 14}, {name: "ひつじ仙人", age: 100}, {name: "ベイビーわんこ", age: 5}, ]; for (let i = 0; i < characters.length; i++) { console.log("--------------------"); const character = characters[i]; console.log(`名前は${character.name}です`); console.log(`${character.age}歳です`); }

コンソールには↓こんな感じで出力されます。

ーーーーーーーーーー
名前はにんじゃわんこです
14歳です
ーーーーーーーーーー
名前はひつじ仙人です
100歳です
ーーーーーーーーーー
名前はベイビーわんこです
5歳です

普通に考えると↓こうなる気がするのですが

ーーーーーーーー
ーーーーーーーー
ーーーーーーーー
名前はにんじゃわんこです
名前はひつじ仙人です
名前はベイビーわんこです
14歳です
100歳です
5歳です

どういう理屈で前者のようになるのでしょうか?

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

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

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

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

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

m.ts10806

2018/10/22 03:24

現状だとスコープ{}の対応が分かりづらいので、インデントをつけていただけると。
guest

回答5

0

for文は

JavaScript

1for (初期化;条件;増減) { 2 処理A; 3 処理B; 4 処理C; 5} 6処理D; 7...

というような書き方になりますね。

上の書き方の流れとして、

___________←_____________←____ ↓ ↑ 初期化 → 条件 → 処理A → 処理B → 処理C → 増減 (↓False)↓ (→True) 処理D

このような感じになります。

条件がTrueなら{ }の中の処理を順に行うようになります。

投稿2018/10/22 03:32

編集2018/10/22 03:35
dice142

総合スコア5158

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

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

退会済みユーザー

退会済みユーザー

2018/10/22 03:51

いつもありがとうございます。理解しました。
guest

0

ベストアンサー

解説用のコード

java

1for (let i = 0; // 1 2 i < characters.length; // 2 3 i++ // 3 4) { 5 console.log("--------------------"); // 4 6 const character = characters[i]; // 5 7 console.log(`名前は${character.name}です`); // 6 8 console.log(`${character.age}歳です`); // 7 9}

実行順は次のようになります。
1,
2, …繰り返しの先頭部分
4,
5,
6,
7,
3, …繰り返しの終わり部分
2,
4,
5,
6,
7,
3,
2,
.
.
.

と、1が実行された以降は、2,4,5,6,7,3までを一度ずつ実行し、それを1つのまとまりとして繰り返します。
各行を繰り返してから、次の行を繰り返すわけではありません。

投稿2018/10/22 03:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/10/22 03:50

いつもありがとうございます。理解しました。初心者側の気持ちを汲んでもらえて回答してくれるので、助かっています。
退会済みユーザー

退会済みユーザー

2018/10/22 03:55

そう感じていただけたならよかったです。慣れるまで躓くことが多いと思いますが、めげずにトライしてみてください。私は中学生からHTMLなりJavascriptなりBasicなり趣味で触ってましたが、めちゃくちゃ左折しまくった方なのでww、理解ができないときの辛さは少しはわかるつもりです
guest

0

普通に考えると↓こうなる気がするのですが

いえ、どう考えてもそうなりませんよ。
理屈も何もそのように出るように書かれているから、表示の通りです。

もっとミニマムコードで試すと良いのでは。

js

1for (let i = 0; i < 10; i++) { 2 console.log("---"); 3 console.log(i); 4} 5 6/* 7--- 80 9--- 101 11--- 122 13*/

投稿2018/10/22 03:28

m.ts10806

総合スコア80850

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

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

0

カッコの中の処理を繰り返すからです

どういう理屈で下が普通だと考えたのかは分かりませんが
下の結果を出すには意図的に個別ループが必要です

javascript

1for (let i = 0; i < characters.length; i++) { 2 console.log("--------------------"); 3} 4 5for (let i = 0; i < characters.length; i++) { 6 console.log(`名前は${characters[i].name}です`); 7} 8 9for (let i = 0; i < characters.length; i++) { 10 console.log(`${characters[i].age}歳です`); 11}

投稿2018/10/22 03:30

Ighrs

総合スコア656

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

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

0

普通に考えると前者になりますが、どういう理由で後者になると思ったのかを書くと、間違いが指摘できると思います。

投稿2018/10/22 03:24

otn

総合スコア84531

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問