我对编程知之甚少,开始探索node.js。节点的一个特点是"事件驱动体系结构"。
虽然我能理解这个想法和优点,但我并没有真正理解它和功能之间的区别。为了尽可能简单,我试着思考标准函数(响应调用的可重用代码段(和事件侦听(响应事件的可重用码段(之间的区别。
有谁能对此有所了解吗?
nodejs Javascript中的函数与所有其他语言一样工作。它们是一段可重用的代码,您可以随时调用。你可以制作一个完整的程序,只需要调用函数来完成它的工作,然后就存在了。
但是,大多数用nodejs编写的程序都会响应外部活动(比如web请求或通过套接字发送的数据(。为此,您必须使用某种类型的事件侦听器。事件监听器实际上只是您的代码注册对特定事件的兴趣,并分配一个函数,该函数将在该事件发生时被调用。函数也用于事件(它们只是常规函数,但被称为"回调"(,但它们是在事件发生时由某些子系统自动调用的,而不是直接从自己的代码中调用它们。
让我们来看一个基于Express模块的nodejs Web服务器:
var express = require('express');
var app = express();
app.get('/', function(req, res){
// this function is called when the webserver gets a request for "/"
res.send('hello world');
});
app.listen(3000);
在该代码中,app.get()
行代码表示,当web服务器收到路径"/"的web请求时,调用在app.get()
调用中声明的函数。这个特定的函数是一个内联匿名函数,但它仍然是一个函数,不必以这种方式声明。它也可以是一个正则命名函数。
因此,上面的代码也可以带有一个命名函数,如下所示:
var express = require('express');
var app = express();
function rootRouteHandler(req, res) {
// this function is called when the webserver gets a request for "/"
res.send('hello world');
}
app.get('/', rootRouteHandler);
app.listen(3000);
这两者的执行也没什么不同。两者都在注册一个函数,以便在将来某个特定事件发生时调用。在这种特殊的情况下,通常首选的设计模式是匿名函数,因为代码更具自包含性和自文档性,而且通常没有理由为函数使用名称(它通常不会在其他地方调用(。