问题 - 来自NODESCHOOL.IO的练习; LEARNYOUNODE; MAKE_IT_MODULAR按给定的文件扩展名读取目录和过滤器文件 - 使用模块完成大部分工作。有关下面引用的添加代码的问题。第一次看到这个 - 但我从这个例子中可以看出,当你调用它时,你可以将代码添加到已定义的函数中。但是想澄清我是否理解它的执行情况。它是回调函数 - 下面提到允许执行这个“添加”的代码吗?谢谢
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)
})
}
答案 0 :(得分:1)
将其视为“将代码添加到已定义的函数”并不准确。您传递的函数与回调参数完全不同。编写模块中的代码以期望它,并调用您传入的函数。
您的函数无法访问模块中的代码,并且模块无法访问函数中的代码。
动态创建函数并将它们作为参数传递给其他函数是JavaScript中非常常见的模式。