0

我来自 Java 背景,我使用传入数据到 node.js 服务器的方法:

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

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

谢谢。

4

1 回答 1

2

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

希望这个问题的答案能让事情变得清晰。

示例
您所写的内容本质上是;

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 + "'.");
});
于 2013-07-27T09:21:50.493 回答