我有 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/