Node.js 함수


JavaScript에서는 함수가 매개변수를 다른 함수로 받을 수 있습니다. 먼저 함수를 정의한 다음 이를 전달하거나 매개변수가 전달되는 위치에서 직접 함수를 정의할 수 있습니다.

Node.js의 함수 사용은 Javascript와 유사합니다. 예를 들어 다음과 같이 할 수 있습니다.

function say(word) {
  console.log(word);
}

function execute(someFunction, value) {
  someFunction(value);
}

execute(say, "Hello");

위 코드에서는 say 함수를 실행 함수의 첫 번째 변수로 전달합니다. 여기서 반환되는 것은 say의 반환 값이 아니라, say 자체입니다!

이런 식으로 say는 실행 시 someFunction이 로컬 변수가 됩니다. someFunction()(괄호 포함)을 호출하여 say 함수를 사용할 수 있습니다.

물론 say에는 변수가 있으므로, someFunction을 호출할 때 Execute는 그러한 변수를 전달할 수 있습니다.


익명 함수

함수를 변수로 전달할 수 있습니다. 하지만 우리는 이 "먼저 정의한 다음 전달" 원을 우회할 필요가 없습니다. 이 함수를 다른 함수의 괄호 안에 직접 정의하고 전달할 수 있습니다:

function execute(someFunction, value) {
  someFunction(value);
}

execute(function(word){ console.log(word) }, "Hello");

우리는 실행 위치가 첫 번째 매개변수를 허용하도록 직접 정의합니다. 실행을 위해 전달됩니다.

이렇게 하면 함수에 이름을 붙일 필요도 없기 때문에 익명 함수라고 부릅니다.


함수 전달을 통해 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);