1514032753 変数に値を入れたあと、その変数名だけを入力しても、console.log(変数名)でも、同様に出力されます。このちがいは何でしょう。添付した画像では、出力された数値の色が違うのですが...

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:
  • 終了:2017/12/24 17:53:51

ベストアンサー

id:a-kuma3 No.1

回答回数4964ベストアンサー獲得回数2150

以前の回答でも書きましたけど、Node のプロンプトは、打ち込んだ内容を評価して、その処理を行い、最後にその評価値を出力します。

ubuntu@ubunt-xenial:~$ node
> var num = 555;
undefined               " var 宣言は値を持っていないので、undefined
> num
555                     " num を評価した値(数値の 555)
> console.log(num);
555                     " console.log() の実行結果
undefined               " console.log() の評価値(戻り値)で、値は undefined

> var num2;             " 変数宣言だけ
undefined               " var 宣言は値を持っていないので、undefined
> num2 = 999;
999                     " 代入文を評価した値は、その代入した値になる
> num2
999                     " 変数を評価すると、その代入した値になる
>

この Node のプロンプトは REPL という Node.js の組み込みモジュールが処理しています。
https://nodejs.org/api/repl.html

  1. プロンプトを表示して入力を待つ
  2. 入力された値を評価(実行)する
  3. 評価した値をコンソールに出力する

を繰り返します。

(3) の評価した値をコンソールを出力するときに色がつくのは、この REPL の機能です。
console.log(num) の後の 555 が白いのは、console.log() 自体には色をつける機能が無いからです。
REPL を実行するときに、オプションを指定することができて、色をつけなくすることも可能です。

ubuntu@ubunt-xenial:~$ cat > myrepl.js
let repl = require('repl');
repl.start({useColors: false)});
^D
ubuntu@ubunt-xenial:~$ node myrepl.js
> var num = 555;
undefined               " 色がついてない
> num
555                     " 色がついてない
>

myrepl.js というスクリプトは、REPL を色なしで実行する、という内容です。

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

>var num = 555;

変数の宣言は、それ自体、値を持っていません。
あまり悩むところではなくて、そう決めたから、というだけのことです。

# node
> let a=1, b=2, c=3;
undefined           " 変数の宣言は、値を持たない
>


>console.log(num);

関数(console.log はメソッドですが)の呼び出しの場合、その評価値は関数の戻り値です。

# node
> .editor
// Entering editor mode (^D to finish, ^C to cancel)
function func1(a) {
    console.log(a*2);
    return;
}
function func2(a) {
    console.log(a*2);
    return a*2;
}
^D
undefined
> func1(10);
20              " func1 内で呼び出している console.log の出力
undefined       " func1 の戻り値(なにも返してないので、undefined)
> func2(10);
20              " func2 内で呼び出している console.log の出力
20              " func2 の戻り値
>
2017/12/24 16:32:28
id:torimaki

宣言と、変数の評価値と、関数の評価値が一緒くたになっていて、分けがわからなくなっていたいみたいです。おかげさまで、霧が晴れてきましたー! ありがとうございます。

2017/12/24 16:54:26

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

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

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

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

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