【发布时间】:2013-08-17 00:48:10
【问题描述】:
我是 Javascript 的新手和经验丰富的程序员,我正在努力掌握模式和设计中的概念,以便在构建应用程序时使用和处理最佳结构。 有几个领域对我来说很新,一个是掌握 Javascript 的作用域和闭包。
所以为了让你们尽可能清楚,我在这篇文章中附上了一个代码示例,希望有人可以把我的逻辑放在一边,给我一个重新思考和正确思考的指南。
我发布的代码是一个非常简单的文件系统/帮助程序库(Node.js,express)的一部分,用于扫描目录,在这些目录上运行一些条件并将结果作为映射返回数组的维度到另一个库(未发布)。您看到的代码是我当前的“测试”条件。我已经公平地评论了它。
要点:https://gist.github.com/jimmiehansson/6235613(完整视图或代码/库)
示例代码块(返回值有问题)
ApiFS.prototype.scan = function(){
var self = this;
var b;
fs.readdir(stgs.fsPath, function(err,folders){
if(folders.length<1) { console.log(errLog.fsEmpty); return; }
rslt = self.walk(folders);
rslt.forEach(function(itm){
if(!self.exclusion(rslt)){ b=self.loader(stgs.fsPath,itm); }
});
}, ioResponse);
console.log(b); // undefined <----
}
足够破冰了。我最大的问题:
无论我做什么,相当小的范围(提升)和关闭都会妨碍我。我目前没有使用 getter 或 setter,因为我根本不知道应该怎么做?我的逻辑完全不正确,还是我错过了一些相当基本的东西?
在代码中,您将看到 scan() 原型函数对每个返回 true/false 值或数组的函数“helper”进行一次调用。
我可以简单地通过将值返回给主 scan() 函数来使用这些值,但是为了我的生活,我不能从 fs.readdir() 函数中获取这些值以返回范围之外,例如外部ioResponse 回调。
我的逻辑缺失了什么,我该如何更好地解决这个问题(即使这意味着重建每一件事)我担心我在设计和布局这些功能的方法以及我如何处理这些值在他们之间。
非常感谢任何帮助!
【问题讨论】:
-
fs.readdir 只接受两个参数。 ioResponse 有什么用? nodejs.org/api/fs.html#fs_fs_readdir_path_callback
-
我不知道,这段代码是我学习的沙盒。谢谢你的收获!
-
其他有兴趣探索回调的人也请访问:stackoverflow.com/questions/4506240/…
标签: javascript node.js scope closures