如何在内置Node.js函数上传递其他参数?

时间:2016-05-06 23:24:14

标签: node.js callback optional-arguments

所以,我正在浏览Node.js learnyounode教程(非常有趣),但我对javascript并不陌生。其中一个请求是让用户编写一个接受目录和文件扩展名作为参数的程序,然后继续执行与给定扩展名匹配的文件。

在通过函数传递数据的各个地方检查我的参数时,我无法让Node.js允许我将其他参数传递给内置函数的回调函数。

例如,我可以运行以下代码段,传递一个错误,路径和扩展名,并希望看到所有传递的参数,但我只看到参数对象中的错误和数据而“ext”变量被忽略了。

var fs = require("fs"), path = require("path")
var dir = process.argv[2], ext = process.argv[3];

fs.readdir(dir, function (err, data, ext) {
  console.log(arguments);
  });

需要此功能的原因是为了避免破坏函数范围以检索ext。

的值

我可以整天使用自定义函数执行此类操作,但内置函数的宽容度稍差。

谢谢, 鲍勃

2 个答案:

答案 0 :(得分:0)

最简单的方法是在每个条目名称上使用内置的path.extname()函数:

fs.readdir(dir, function(err, entries) {
  if (err) throw err;
  for (var i = 0; i < entries.length; ++i) {
    if (path.extname(entries[i]) === ext)
      console.log(entries[i]);
  }
});

答案 1 :(得分:0)

与irc中的node.js人交谈,结果表明javascript工作方式这样一种方法来保持范围内的界限是没有必要的。默认情况下,Node.js将模块放在它们自己的闭包中,因此可以在函数外部访问变量,而不会干扰全局命名空间。

node js and variable scope上找到这个答案,这个答案可能最符合我的情况,但在我发布问题时我并不知道我需要什么。

在Mozilla上也找到了一些不错的closure examples

就个人而言,我认为我比这更了解javascript,我希望这个答案可以帮助那些从C / PHP背景进入node.js的人