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

node.js nodeschool learnyounode need help understanding the code of the solution

本文关键字:助理 解决方案 代码 帮助 js nodeschool learnyounode node      更新时间:2024-03-19

问题-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)
  })
 }

将其视为"向已定义的函数添加代码"并不准确。您将传入一个完全不同的函数作为回调参数。模块中的代码就是这样编写的,它会调用您传入的函数

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

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