javascript - 关于 request.addListener 的回调函数

标签 javascript node.js

我有 Java 背景,我有一种利用 Node.js 服务器传入数据的方法:

request.addListener("data", function(postDataChunk) {
  postData += postDataChunk;
  console.log("Received POST data chunk '"+
  postDataChunk + "'.");
});

正如我所见,postData 变量总是接收新数据并将其添加到现有数据中。 我的问题是: 每次发生数据事件时都会执行回调函数,但在我看来,每次调用该函数时,我们实际上都会获得一个新变量“postData”。所以我不明白 postData 变量实际上是如何每次更新的,而不是像在常规 Java 中那样被创建为新变量。

谢谢。

最佳答案

如果您使用 var postData,它将执行与 JAVA 中相同的操作,但这里 postData 是一个会递增的全局变量。在 JavaScript 中,如果您没有显式编写关键字 var,则该变量会在第一次调用时自动实例化,然后像全局变量一样使用。

希望能得到这个问题的答案 question会让事情变得清楚。

示例
你写的基本上是;

request.addListener("data", function(postDataChunk) {
  /*"var" omitted in function!
   *creates variable "window['postData']"
   *unless already created*/
  postData += postDataChunk;
  console.log("Received POST data chunk '"+
  postDataChunk + "'.");
});

使用 var 确定函数的作用域

request.addListener("data", function(postDataChunk) {
  //"var" keyword used! variable created in this scope!
  var postData += postDataChunk;
  console.log("Received POST data chunk '"+
  postDataChunk + "'.");
});

关于javascript - 关于 request.addListener 的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17896215/

相关文章:

node.js - 使用 ffmetadata 和 fs 在 nodejs 中读取文件元数据返回未定义

node.js - 有时,我的 AWS lambda 函数未使用 invoke async 运行

mysql - 池不断增加连接并以 ER_CON_COUNT_ERROR 结束

javascript - DOMContentLoaded 事件为单个页面加载触发两次

javascript - 以 "@"开头的 JS 变量

javascript - 通过映射比较列表中的所有值

javascript - 如何检索asp文件的url中传递的参数

php - 设置 haProxy 以在 Appfog 上切换多个应用程序的内容

javascript - 使用 JavaScript 在文本区域中的选择之前和之后插入文本

Heroku 上的 Node.js - Memcached 使用