javascript - 在javascript中的不同范围之间返回值

标签 javascript node.js scope closures

我是 Javascript 的新手,也是经验丰富的程序员,在构建应用程序时,我一直在努力掌握模式和设计最佳结构的概念。 有几个领域对我来说很陌生,其中之一就是掌握 Javascript 的作用域和闭包。

因此,为了让你们尽可能清楚,我在这篇文章中附上了一个代码示例,希望有人可以把我的逻辑放在适当的位置,并给我一个重新思考和正确思考的指导方针。

我发布的代码是一个非常简单的文件系统/帮助程序库(Node.js,express)的一部分,用于扫描目录,在这些目录上运行一些条件并将结果作为 map 返回数组的维度到另一个库(未发布)。您看到的代码是我当前的“测试”条件。我已经公平地评论了它。

要点:https://gist.github.com/jimmiehansson/6235613 (完整 View 或代码/库)

示例代码块(返回值有问题)

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() 原型(prototype)函数对每个返回 true/false 值或数组的函数“helper”进行一次调用。

我可以简单地通过将值返回到主 scan() 函数来处理这些,但是为了我的生命,我不能从 fs.readdir() 函数中获取这些值以返回范围之外,例如在外部ioResponse 回调。

我的逻辑缺失了什么,我怎样才能更好地解决这个问题(即使这意味着重建所有东西)我担心我在设计和布局这些功能的方法以及我如何处理这些值时做错了一些事情在他们之间。

非常感谢任何帮助!

最佳答案

这与范围无关,与时机有关。 readdir 是异步的。它将请求发送到文件系统,然后让之前的功能继续。

console.log(b); b=self.loader() 之前执行。

如果您想处理来自接受回调的函数的数据,您需要在回调中执行该工作。

关于javascript - 在javascript中的不同范围之间返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18242369/

相关文章:

JavaScript 无法访问文档 : null or undefined

javascript - 即使单击后也更改按钮颜色

node.js - webpack.js 的新 npm 安装引发 Block-scope 错误

node.js - Puppeteer 中的选择性渲染

javascript - 如何向该对象添加元素

javascript - ng-bind-html 不能正常工作

node.js - Mongoose是否支持固定队列数组的概念

c++ - 如何在范围内声明?

c - 如何在 C 中使用函数(初学者)

javascript - 如何在 angular.js 中调用 ng-title 属性上的作用域函数