何时在以下代码中调用/执行/调用JavaScript函数表达式?

时间:2016-06-16 21:53:51

标签: javascript node.js express

var express = require('express')

var app = express();

app.use(express.static('static'));

var server = app.listen(3000, function() {
    var port = server.address().port;
    console.log("Started server at port", port);
});

我是JavaScript的初学者。在这段代码中,我们从未调用过server();明确但它正在执行。它也不是立即调用函数表达式。 app.listen()在什么时候真正执行了?

代码来自:https://github.com/vasansr/react-tutorial-mern/blob/master/webapp.js

4 个答案:

答案 0 :(得分:3)

app.listen在到达那一行时执行。

var server = app.listen(3000, function() { ...

现在服务器侦听端口3000上的传入连接。

listen函数的第二个参数是一个回调函数,只要有人连接到端口3000(这是函数的第一个参数)就会调用它。

答案 1 :(得分:2)

来自expressjs docs

app.listen()方法返回一个http.Server对象,(对于HTTP)是以下方便的方法:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

答案 2 :(得分:0)

server不是函数。它是一个变量。 函数app.listen(...)就在第7行执行。它的结果被赋值给变量server

app.listen()函数有一个回调方法(第二个参数)。当应用程序开始收听时执行它。可以这么说。 当这个回调被称为server.address()。port将返回服务器的端口。

答案 3 :(得分:-1)

服务器似乎无法在任何地方调用。另外,我认为服务器不是一个函数,而是一个对象(从app.listen函数返回)。