Javascript устанавливает переменную const внутри блока try
возможно ли это в ЕС6 чтобы установить переменную внутри try{} используя const в строгом режиме?
'use strict';
const path = require('path');
try
{
const configPath = path.resolve(process.cwd(), config);
}
catch(error)
{
//.....
}
console.log(configPath);
это не удается Линт, потому что configPath определяется вне области видимости. Кажется, что это работает только так:
'use strict';
const path = require('path');
let configPath;
try
{
configPath = path.resolve(process.cwd(), config);
} catch(error)
{
//.....
}
console.log(configPath);
в принципе, есть в любом случае использовать const вместо let для этого дела?
4 ответов
объявление переменной как const требует, чтобы вы немедленно указали его на значение, и эта ссылка не может быть изменена.
означает, что вы не можете определить его в одном месте (за пределами try) и присвоить ему значение где-то еще (внутри try).
const test; // Syntax Error
try {
test = 5;
} catch(err) {}
С другой стороны, как создание его, так и придание ему значения в try блок в порядке.
try {
const test = 5; // this is fine
} catch(err) {}
, const блок-уровня, такие как let, поэтому, если вы создадите его и дадите ему значение в своем try блок, он будет существовать только внутри этой области.
try {
const test = 5; // this is fine
} catch(err) {}
console.log(test); // test doesn't exist here
поэтому, если вам нужно получить доступ к этой переменной вне try, вы должны использовать let:
let configPath;
try {
configPath = path.resolve(process.cwd(), config);
} catch(error) {
//.....
}
console.log(configPath);
альтернативно, хотя, вероятно, более запутанно, вы можете использовать var чтобы создать переменную в try и использовать его вне его, потому что var is область видимости внутри функции, а не блок (и получает подняли):
try {
var configPath = path.resolve(process.cwd(), config);
} catch(error) {
//.....
}
console.log(configPath);
использовать let. вы не можете использовать const. const не позволяет переназначить объявленную константу. Хотя, как правило, хорошая практика объявлять такие объекты, как ваш с const на весь смысл этого позволяет объектам мутировать, не позволяя им переназначаться. Вы переназначаете объект (таким образом, побеждая цель const), чтобы использовать let вместо.
let path = require('path');
// Good to go!
Я бы попытался использовать переменную temp с let и назначьте это const var после try/catch и "удалить" temp var.
'use strict';
let temp;
try {
temp = path.resolve(process.cwd(), config);
} catch (error) {
//.....
}
const configPath = temp;
temp = undefined;
console.log(configPath);
'use strict';
const path = require('path');
const configPath = (function() {
try {
return path.resolve(process.cwd(), config);
} catch (error) {
//.....
}
})()
console.log(configPath);