質問: chunk.toString(); console.log("XXXXXX"); }); ```
回答: ``` process.stdin.on('data', function (chunk) { var line = chunk.toString(); console.log("XXXXXX"); }); ``` は`process.stdin.on("data", fun)`は、標準入力にデータが来たときに呼び出される関数(イベントハンドラー)を登録します。ざっくりいうと、「標準入力にデータがきたらこうしてね」を設定します。 第2引数にfunction expression(anonymous function/無名関数)を渡していますが、`data`イベントが発生したとき、この無名関数の引数にデータが渡され実行されます。 例えばユーザーが"abc"と入力してEnterを押すと、パラメーター`chunk`に`"abc\n"`が渡されます。 以下は細かい話です。 `process.stdin`は`stream.Readable`クラスです。 公式の`Readable`のdocsで`resume`やstream three statesを読めば分かりますが、デフォルトでは`stdin`は入ってきたデータをそのまま捨てます。 `.resume()`するか`data`イベントのハンドラーを設定すると、"flowing"モードに切り替わり、`data`イベントのハンドラーにせっせとデータを送るようになります。またこれにより、プログラムの最後の行まで実行されたあと勝手にプロセスが終了しなくなります。 `Readable`が`data`イベントで渡すデータはデフォルトでは`Buffer`オブジェクトですが、`.setEncoding()`により`string`として渡すようになります。つまり今のコードでは引数`chunk`が文字列となります。(なので`.toString()`は必要ないと思います) `data`イベントのハンドラーを設定すれば`stdin`は"flowing"モードになるので、なぜ`process.stdin.resume()`が必要かはよくわからないです。試しにそれなしで実行してみましたがうまくいきます。分かる方がいたらご指摘ください。