Node.jsの関数
JavaScript では、関数は別の関数としてパラメーターを受け取ることができます。最初に関数を定義してからそれを渡すことも、パラメーターが渡される場所で直接関数を定義することもできます。
Node.js での関数の使用は Javascript に似ています。たとえば、次のようにすることができます。
function say(word) { console.log(word); } function execute(someFunction, value) { someFunction(value); } execute(say, "Hello");
上記のコードでは、execute 関数の最初の変数として Say 関数を渡します。ここで返されるのは、say の戻り値ではなく、say 自体です。
このように、executeではsayがローカル変数someFunctionとなり、someFunction()(括弧付き)を呼び出すことでsay関数を使用することができます。
もちろん、say には変数があるので、execute は someFunction を呼び出すときにそのような変数を渡すことができます。
匿名関数
関数を変数として渡すことができます。しかし、この「最初に定義してから渡す」というサイクルを回避する必要はありません。この関数を直接定義して、別の関数の括弧内に渡すことができます:
function execute(someFunction, value) { someFunction(value); } execute(function(word){ console.log(word) }, "Hello");
whereexecute が最初のパラメーターを受け入れる関数を直接定義します。実行するために渡されます。
このように、関数に名前を付ける必要さえないため、この関数は匿名関数と呼ばれます。
関数の受け渡しによって HTTP サーバーがどのように動作するか
この知識を基に、単純ではあるが単純ではない HTTP サーバーを見てみましょう:
var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(8888);
これで、より明確に見えるはずです。createServer 関数に渡す匿名関数。
次のようなコードでも同じ目的を達成できます:
var http = require("http"); function onRequest(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888);