javascript - 函数 VS 事件监听器

标签 javascript function event-handling dom-events

我对编程知之甚少,开始探索 node.js。 节点的特点之一是“事件驱动架构”。

虽然我能理解这个想法和优点,但我并没有真正理解它和功能之间的区别。 为了尽可能简单,我尝试思考标准函数(响应调用的可重用代码段)和事件监听(响应事件的可重用代码段)之间的区别。

有没有人可以对此有所了解?

最佳答案

nodejs Javascript 中的函数就像所有其他语言一样工作。它们是一段可重用的代码,您可以随时调用。您可以制作一个仅调用函数来完成其工作然后存在的整个程序。

但是,大多数用 nodejs 编写的程序都会响应外部事件(例如 Web 请求或通过套接字发送的数据)。为此,您必须使用某种事件监听器。事件监听器实际上只是您的代码注册对特定事件的兴趣并分配一个函数,该函数将在该事件发生时调用。函数也用于事件(它们只是常规函数,但称为“回调”),但是当事件发生时它们会由某些子系统自动调用,而不是您直接从您自己的代码中调用它们。

让我们看一下基于 Express 模块的 nodejs 网络服务器:

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() 这行代码是说当网络服务器收到对路径“/”的网络请求时,然后调用在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);

这两个的执行没有区别。两者都在注册一个函数,以便在将来某个特定事件发生时调用。在这种特殊情况下,通常首选的设计模式是匿名函数,因为代码更加自包含和 self 记录,并且通常没有理由为函数使用名称(它通常不会在任何地方调用否则)。

关于javascript - 函数 VS 事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257486/

相关文章:

c# - 我什么时候应该在事件聚合器上使用事件处理程序?

javascript - Jquery 函数 submit() 在 ajax 成功函数中不起作用

c - 将 3 维数组传递给 C 中的函数

javascript - jQuery 和 CSS 下拉菜单无法正确堆叠和定位

c - 函数返回 int 但出现奇怪的行为

javascript - 使用@typedef 定义特定的函数类型

c# - 无法在 Monotouch 中正确使用 EventHandler 的通用版本

vb.net - 在VB.net故障中引发事件

javascript - 悬停时 HTML/JavaScript 展开按钮/div

javascript - 如何使用 JavaScript 通过字典在本地存储中输入多个值?