据我所知,有很多关于回调的文档和课程。我已经阅读了很多这些资源,但对于这个特殊的问题,我不明白发生了什么。并且,我认为帮助解决这个特殊问题将有助于我更好地理解回调。
简而言之,我不明白为什么我可以访问'分机?在主要的一部分'readFile()'函数,但我无法将其传递给该函数中的函数,即< filterData()'功能
感谢您帮助我理解这一点。
const fs = require("fs");
const path = require("path");
const dir1 = process.argv[2];
const fileType = process.argv[3];
const whenDone = function(err, data) {
if(err) {
console.log(err);
} else {
for(i = 0; i < data.length - 1; i++) {
console.log(data[i]);
}
}
}
let arr = [];
function readFile(dirName, ext, callback) {
fs.readdir(dirName, function (err, data) {
if (err) {
return callback(err, null);
}
// ext and data are defined here:
console.log(ext, data);
function filterData(ext) {
// ext and data are not defined here?
console.log(ext, data);
return data.filter(function(files) {
return arr = files.includes(ext);
console.log(arr);
});
return callback(null, arr);
}
});
}
readFile(dir1, fileType, whenDone);
答案 0 :(得分:1)
您正在嵌套函数中定义参数名称ext
,它会影响较高范围ext
参数。因此,您可以将其更改为其他内容,并且您将具有较高范围ext
param访问权限。
答案 1 :(得分:1)
原因是在嵌套函数(filterData
)中,您声明了一个参数(本质上是一个局部变量),其名称(ext
)已经存在于更高的范围内({{ 1}}),因此,在readFile
函数的持续时间内,filterData
指的是传递给它的内容,而不是传递给ext
的{{1}}。这称为"hiding" or "shadowing",当较小的作用域声明已在较高作用域中声明的标识符时发生。
我已经写过 here 。
如果您只是更改嵌套函数的参数名称,并确保在嵌套函数中引用这些参数名称,它将起作用:
ext
这是一个简单的例子:
readFile
&#13;