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);