参数被声明,但它的值永远不会被读取.为什么不



要发送电子邮件,我有一个这样的控制器方法:

const send = function (subject, template, to, options) {
// VSC says about "subject": is declared but its value is never read. 
// VSC does not say this for the other three parameters.
return new Promise(function (resolve, reject) {
fs.readFile(template, "utf8", function (err, templateContent) {
if (err) {
return resolve(false);
}
var subject = subject;
console.log(subject);
// this is where I do read "subject" but it returns 'undefined'
// (even though I am passing the function a value for the parameter)
... etc

我做错了什么?在我看来,我已经声明了一个参数subject,并在稍后的控制器方法中使用。

var subject = subject;

var subject在传递给readFile的回调函数范围内创建一个名为subject的新变量。

这掩盖了作为分配给send的函数的参数名而创建的subject变量。

因此,var subject = subject;将本地subject(当时是undefined)的值复制到subject(不执行任何操作)。

给变量起不同的名字即使他们做了类似的事情。

我建议使用linter,它可以强制执行像no-shadow这样的规则(你似乎已经使用了一个- VS Code不会生成错误消息,只会从一个工具报告它-所以确保你为该工具打开了该规则)。

函数内的var将被提升到顶部,因此在运行时它是:

fs.readFile(template, "utf8", function (err, templateContent) {
var subject;
// ...
subject = subject; //undefined
});

只需为您的嵌套主题使用另一个名称,如_subject,并避免遮蔽变量名称。

相关内容

最新更新