所以我有一个脚本,可以从当前目录及其下面的所有内容创建一个对象。
这是 return 语句的 console.log。
› node recursiveObjectifyDir.js
{ files:
{ 'LICENSE-MIT': { stat: [Object] },
Gruntfile: { stat: [Object] } },
dirs: { nested2: [Circular] } }
这个[Circular]
是什么意思以及它来自哪里?
这里是实际的脚本供引用:
var fs = require('fs');
var path = require('path');
function buildFolder(folder) {
if (!folder) {
folder = __dirname;
}
nestedFiles = fs.readdirSync(folder);
currentFile = folder + '/' + nestedFiles.pop();
main = {
files: {},
dirs: {}
};
while (currentFile !== folder + '/undefined') {
var fileName = path.basename(currentFile, path.extname(currentFile));
var fileStat = fs.statSync(currentFile);
var fullPath = folder + '/' + fileName;
if (fileStat.isDirectory()) {
if (fullPath.match(/git/)){
} else if (fullPath.match(/node_modules/)){
} else{
var folderObj = buildFolder(fullPath);
Object.defineProperty(main.dirs,
fileName, {
configurable: true,
enumerable: true,
value: folderObj
}
);
}
} else {
if (fullPath.match(/DS_Store/)){}
Object.defineProperty(main.files,
fileName, {
configurable: true,
enumerable: true,
value: {
stat: fileStat
},
}
);
}
currentFile = folder + '/' + nestedFiles.pop();
}
return main;
}
buildFolderReturn = buildFolder();
console.log(buildFolderReturn);
最佳答案
使用node.js(javascript语言),你必须小心范围。在递归调用的函数中,您一开始就将这些变量视为在函数作用域内,但同一函数的递归调用可以访问它们。只需将 var 放在那些前面,就像您在循环中所做的那样。
var nestedFiles = fs.readdirSync(folder);
var currentFile = folder + '/' + nestedFiles.pop();
var main = {
files: {},
dirs: {}
};
我认为这可能是问题所在。将 var 放在所有内容上,除非您希望它已经在范围内可用。除非您已经在全局范围内,但我建议将 var 放在尚未在范围内的任何变量上。
关于javascript - 递归函数调用在 console.log() 上返回 [Circular],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463035/