1512804219 JavaScriptのfor文について質問します。2つあります。

1)添付した画像とおり、
for(i=0; i<frs.length; i++)とした場合も
for(var i=0; i<frs.length; i++)とした場合も、
同様の出力になります。
i=0と、var i=0どちらが正式でしょうか。

2)出力したあと、undefinedが続きます。どこか未定義のようなのですが...気になります。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2017/12/10 15:10:24

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

Node.js をコンソールで使っている、とかいう状況ですよね。

>1)添付した画像とおり、
添付の画像の範囲だと、どちらが正式とか、あまり関係ありません。

var つきで変数宣言をすると、その変数は、関数の中だけで有効になります。
つけないと、どこでも参照できる。

こんな場合で、差が出てきます。

function hoge(arr) {
    for (i = 0 ; i < arr.length ; ++i) {    // var なし
        console.log(arr[i]);
    }
}

hoge(['apple', 'orange', 'strawberry']);
console.log(i);     // 3 って、表示される

function hoge(arr) {
    for (var i = 0 ; i < arr.length ; ++i) {    // var つき
        console.log(arr[i]);
    }
}

hoge(['apple', 'orange', 'strawberry']);
console.log(i);     // undefined って、表示される

C言語由来の変数スコープが念頭にある人たちが書きだしたのでしょうけれど、あまり差がない(なくはないけど)。
for の中だけに閉じ込めておきたいなら、var じゃなくて let を使うのが正式です。

for (let i = 0 ; i < frs.length ; ++i) {    // let を使う
    console.log(arr[i]);
}
console.log(i);     // undefined って、表示される


>2)出力したあと、undefinedが続きます。どこか未定義のようなのですが...気になります。
Node のコマンドプロンプトは、打ち込んだ文や式の評価値を最後に出力します。

気になっているところは、for 文の評価値が表示されてます。
for 文は、値を持たないので、undefined が表示されます。

Node のプロンプトから、以下のように打つと、

> console.log("a-kuma3")

こんな感じで表示されます。

> console.log("a-kuma3")
a-kuma3
undefined

最初の "a-kuma3" が console.log の出力で、次の undefined は、console.log の戻り値です。
console.log メソッドは、戻り値を返さないので、undefined と表示されます。

他4件のコメントを見る
id:a-kuma3

undefinedの件、現状では理解できないっぽいです。これからの宿題とさせてください。

難しいことだと思います。ぼくも、うまく説明できません。
普通にプログラムを書くときには、undefined を積極的に使うことはあまりなくて、変数やプロパティは使う前に初期化する必要があるよね、くらいで良いと思います。

2017/12/10 14:38:17
id:torimaki

勉強になりました。ありがとうございます!

2017/12/10 15:10:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません