1)添付した画像とおり、
for(i=0; i<frs.length; i++)とした場合も
for(var i=0; i<frs.length; i++)とした場合も、
同様の出力になります。
i=0と、var i=0どちらが正式でしょうか。
2)出力したあと、undefinedが続きます。どこか未定義のようなのですが...気になります。
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 と表示されます。
難しいことだと思います。ぼくも、うまく説明できません。
2017/12/10 14:38:17普通にプログラムを書くときには、undefined を積極的に使うことはあまりなくて、変数やプロパティは使う前に初期化する必要があるよね、くらいで良いと思います。
勉強になりました。ありがとうございます!
2017/12/10 15:10:09