Я работал довольно много с javascript, но вчера я начал использовать node.js. Это небольшой скрипт, который запускает jslint в файлах папки. В этом примере я изменил команду на вызов ls
вместо jslint
.Являются ли замыкания разными в node.js?
var sys = require("sys");
var fs = require("fs");
var cp = require('child_process');
var path = fs.realpathSync("./src/");
fs.readdir(fs.realpathSync("./src/"), function(err, files) {
for (var i = 0; i < files.length; i++) {
var filename = files[i];
var complete = path + filename;
// Run jslint on each file
var jslint = cp.exec("ls " + complete, function(error, stdout, stderr) {
console.log(filename + " : " + stdout);
});
}
});
Выход заключается в следующем:
jskata.nofreeze.js: /home/dan/php/jskata/src/jskata.undo.js
jskata.nofreeze.js: /home/dan/php/jskata/src/jskata.nofreeze.js
jskata.nofreeze.js: /home/dan/php/jskata/src/jskata.timezone.js
Почему строка console.log(filename + " : " + stdout);
всегда печатает jskata.nofreeze.js
, когда имя файла должно совпадать с результатом ls
? Являются ли замыкания и области действия различными в node.js, чем в javascript?
Почему это на самом деле, что это заставляет пройти за значение? Я реализовал то же самое до прихода сюда, но пришел, чтобы понять, почему именно он работает по сравнению с наивной (проблемной) реализацией. – matanster