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