要發送電子郵件,我有一個控制器方法,如下所示:
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,稍后將在控制器方法中使用。
uj5u.com熱心網友回復:
var subject = subject;
var subject創建一個新變數,subject在傳遞給的回呼函式范圍內命名readFile。
這會隱藏subject作為分配給 的函式的引數名稱而創建的變數send。
var subject = subject;subject因此將本地(undefined當時)的值復制到subject(什么都不做)。
給你的變數起不同的名字,即使它們做類似的事情。
我建議使用可以強制執行no-shadow 之類的規則的 linter (您似乎已經在使用一個 - VS Code 不會生成錯誤訊息,只從一個工具報告它 - 所以確保你打開它該工具的規則)。
uj5u.com熱心網友回復:
var函式內部將被提升到頂部,因此在運行時它是:
fs.readFile(template, "utf8", function (err, templateContent) {
var subject;
// ...
subject = subject; //undefined
});
只需為您的嵌套主題使用另一個名稱,_subject并且通常避免隱藏變數名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465846.html
標籤:javascript 节点.js 功能
