我想知道是否有人可以帮助我理解以下行为。如果我在 node.js 服务器上有一个 app.js 文件,如下所示:
var http = require('http');
var _ = require('underscore');
http.createServer(function(request, response) {
var x = '';
_.each([1, 2, 3], function(num){
x +=" underscore.js says " + num;
});
response.writeHead(200, {
'Content-Type': 'text/html'
})
response.end(x);
}).listen(3000, null);
然后每次我请求页面时,我都会看到文本“underscore.js say x”3 次。我希望这是因为循环中有 3 个数字,并且每次请求都会重置 x。但是,如果我有以下内容(x 移动到 createServer 的回调之外):
var http = require('http');
var _ = require('underscore');
var x = ''; // Note x is moved outside the createserver callback
http.createServer(function(request, response) {
_.each([1, 2, 3], function(num){
x +=" underscore.js says " + num;
});
response.writeHead(200, {
'Content-Type': 'text/html'
})
response.end(x);
}).listen(3000, null);
第一次加载产生 3 个结果(如预期的那样),但后续请求总是将循环附加两次(所以 6 个“underscore.js 说 x”行。我可以理解它每次都附加到同一个变量,但我希望它能够每次以 3 的倍数打印结果,因此第一次调用总共打印 3 行,第二次打印 6,第三次打印 9,依此类推。
我对 node.js 很陌生,所以如果有人能解释这种行为或这个循环如何以我不期望的方式工作,我将不胜感激。
谢谢