gpt4 book ai didi

javascript - 递归函数调用在 console.log() 上返回 [Circular]

转载 作者:行者123 更新时间:2023-12-03 12:20:34 24 4
gpt4 key购买 nike

所以我有一个脚本,可以从当前目录及其下面的所有内容创建一个对象。

这是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com