关于request.addListener的回调函数

时间:2013-07-27 09:17:59

标签: javascript node.js

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

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

如果使用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 + "'.");
});