Ist es in ES6 möglich, eine Variable innerhalb eines try{}
mit const
im strikten Modus zu setzen?
'use strict';
const path = require('path');
try
{
const configPath = path.resolve(process.cwd(), config);
}
catch(error)
{
//.....
}
console.log(configPath);
Dies schlägt fehl, da configPath
außerhalb des Gültigkeitsbereichs definiert ist. Die einzige Möglichkeit, wie dies zu funktionieren scheint, ist:
'use strict';
const path = require('path');
let configPath;
try
{
configPath = path.resolve(process.cwd(), config);
} catch(error)
{
//.....
}
console.log(configPath);
Gibt es grundsätzlich const
anstelle von let
für diesen Fall?
Wenn Sie eine Variable als const
deklarieren, müssen Sie sie sofort auf einen Wert zeigen. Diese Referenz kann nicht geändert werden.
Das heißt, Sie können ihn nicht an einer Stelle definieren (außerhalb von try
) und ihm einen Wert an anderer Stelle (innerhalb von try
) zuweisen.
const test; // Syntax Error
try {
test = 5;
} catch(err) {}
Auf der anderen Seite ist das Erstellen und das Vergeben eines Werts innerhalb des try
-Blocks in Ordnung.
try {
const test = 5; // this is fine
} catch(err) {}
const
hat jedoch einen Blockbereich, wie let
. Wenn Sie also einen Wert erstellen und ihm einen Wert innerhalb Ihres try
-Blocks zuweisen, ist er nur in diesem Bereich vorhanden.
try {
const test = 5; // this is fine
} catch(err) {}
console.log(test); // test doesn't exist here
Wenn Sie also auf diese Variable außerhalb der try
zugreifen müssen, müssen Sie let
verwenden:
let configPath;
try {
configPath = path.resolve(process.cwd(), config);
} catch(error) {
//.....
}
console.log(configPath);
Alternativ, obwohl wahrscheinlich verwirrender, können Sie var
verwenden, um eine Variable innerhalb der try
zu erstellen und außerhalb davon zu verwenden, da var
innerhalb der Funktion und nicht innerhalb des Blocks (und erhält hoisted ) liegt:
try {
var configPath = path.resolve(process.cwd(), config);
} catch(error) {
//.....
}
console.log(configPath);
'use strict';
const path = require('path');
const configPath = (function() {
try {
return path.resolve(process.cwd(), config);
} catch (error) {
//.....
}
})()
console.log(configPath);
Ich würde versuchen, eine temporäre Variable mit let
zu verwenden und diese nach dem const
/try
einer catch
var zuzuweisen und die temporäre Var. Zu "löschen".
'use strict';
let temp;
try {
temp = path.resolve(process.cwd(), config);
} catch (error) {
//.....
}
const configPath = temp;
temp = undefined;
console.log(configPath);
Verwenden Sie let
. Sie können keine const
verwenden. const
erlaubt keine erneute Zuweisung der deklarierten Konstante. Während es sich in der Regel bewährt hat, Objekte wie Ihres mit const
zu deklarieren, besteht der gesamte Punkt dabei darin, Objekte mutieren zu lassen, ohne sie neu zuzuweisen. Sie weisen das Objekt neu zu (also den Zweck von const
), verwenden Sie stattdessen let
.
let path = require('path');
// Good to go!