node.js nodeschool learnyounode需要帮助理解解决方案的代码

时间:2013-12-05 18:08:05

标签: javascript node.js

问题 - 来自NODESCHOOL.IO的练习; LEARNYOUNODE; MAKE_IT_MODULAR按给定的文件扩展名读取目录和过滤器文件 - 使用模块完成大部分工作。有关下面引用的添加代码的问题。第一次看到这个 - 但我从这个例子中可以看出,当你调用它时,你可以将代码添加到已定义的函数中。但是想澄清我是否理解它的执行情况。它是回调函数 - 下面提到允许执行这个“添加”的代码吗?谢谢

solution.js:

var filterFn = require('./solution_filter.js')
var dir = process.argv[2]
var filterStr = process.argv[3]

filterFn(dir, filterStr, function (err, list) {
if (err)
  return console.error('There was an error:', err)


// QUESTION ON THIS PART OF THE CODE - see below in the module part of the program

list.forEach(function (file) {
  console.log(file)
})

})


//这是该计划的模块

solution_filter.js:

// require file system module

var fs = require('fs')

module.exports = function (dir, filterStr, callback) {
var regex = new RegExp('\\.' + filterStr + '$')

fs.readdir(dir, function (err, list) {

// callback err if the readdir method fails 

  if (err)
    return callback(err)

  list = list.filter(function (file) {
    return regex.test(file)
  })

 // IS THIS CALLBACK SO IT LOOP AND IS ABLE TO EXECUTE ADDED CODE in the solution.js filterFn()

  callback(null, list)
  })
 }

1 个答案:

答案 0 :(得分:1)

将其视为“将代码添加到已定义的函数”并不准确。您传递的函数与回调参数完全不同。编写模块中的代码以期望它,并调用您传入的函数。

您的函数无法访问模块中的代码,并且模块无法访问函数中的代码。

动态创建函数并将它们作为参数传递给其他函数是JavaScript中非常常见的模式。