参数已声明但其值从未被读取...为什么不呢
parameter is declared but its value is never read... why not
要发送电子邮件,我有一个控制器方法:
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
的新变量
此 shadows subject
变量创建为分配给 send
的函数的参数名称。
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
,并且通常避免隐藏变量名称。
要发送电子邮件,我有一个控制器方法:
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
的新变量
此 shadows subject
变量创建为分配给 send
的函数的参数名称。
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
,并且通常避免隐藏变量名称。