var fs = require('fs');
var path = require('path');
// 递归创建目录
function myMkdirSync(dirname) {
// 判断当前目录是否创建,第一次进来,肯定是没创建的,如果创建了,就不创建了
if (fs.existsSync(dirname)) {
return true;
} else {
// 如果父级目录已经创建,然后才能创建子级目录
/*
假设参数为 a/b/c 那么path.dirname(dirname)会返回a/b 至于为什么返回 a/b 视频中已经详细讲解,可以自己手动测试
第一次执行if小括号:运行myMkdirSync(a/b) 那么还会进入当前else分支,然后又会执行if判断,这时path.dirname(dirname)会返回a
!!!!! 重点:这时if小括号内容执行完后会继续执行,并没有去执行后边中括号内部的逻辑代码 !!!!!
第二次执行if小括号:运行myMkdirSync(a) 那么还会进入当前else分支,然后又会执行if判断,这时path.dirname(dirname)会返回当前这个fs.js所在父级目录
第三次执行if小括号:运行myMkdirSync(父级目录) 那么因为父级目录是确实存在的,所以会返回true,也就是第8行代码
!!!!! 然后返回true后,开始执行if判断了 !!!!!
第一次执行if中括号:对照的是第三次执行if小括号,也就是说,这时候的参数 diranme 为a (这时不要以为参数是 父级目录,父级目录是 path.dirname(dirname) 返回的结果,我们的参数是 dirname 而此时他的值为 a)
!!!!! 这时创建了一个目录为a,并且返回一个true !!!!!
因为上次执行完后,返回一个 true,所以,第二次执行if小括号的返回值就是 true 这时候的参数 diranme 为a/b
!!!!! 这时在目录a下 创建了一个目录为b,并且返回一个true !!!!!
又因为上次执行完后,返回一个 true 所以,第一次执行if小括号的返回值就是 true 这时候的参数 diranme 为a/b/c
!!!!! 这时在目录a下的目录b下 创建了一个目录为c,并且返回一个true !!!!!
*/
if (myMkdirSync(path.dirname(dirname))) {
fs.mkdirSync(dirname);
return true;
}
}
}
myMkdirSync('a/b/c');
手写一个递归循环创建目录(内含详细注释)
猜你喜欢
转载自blog.csdn.net/CS_DGD/article/details/113151989
今日推荐
周排行