2016-12-02 3 views
4

Возможно ли в ES6 установить переменную внутри try{} с использованием const в строгом режиме?Javascript set const переменная внутри блока try

'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 для этого случая?

+1

Что вы ожидаете от 'console.log (configPath);' если ошибка выбрана? –

ответ

17

Объявление переменной const требует немедленного указания ее на значение, и эта ссылка не может быть изменена.

Значение означает, что вы не можете определить его в одном месте (за пределами try) и присвоить ему значение где-то еще (внутри try).

const test; // Syntax Error 
 
try { 
 
    test = 5; 
 
} catch(err) {}

С другой стороны, и создавать его и придавая ему значение в пределах try блока в порядке.

try { 
 
    const test = 5; // this is fine 
 
} catch(err) {}

Однако const является блок-Scoped, как 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 имеет область действия внутри функции иона, а не блок (и получает hoisted):

try { 
    var configPath = path.resolve(process.cwd(), config); 
} catch(error) { 
    //..... 
} 

console.log(configPath); 
+0

Ничего себе так потрясающая благодарность. – Justin

+0

@ приветствую друга, рада помочь – nem035

1

Использование let. Вы не можете использовать const. const не позволяет переназначить объявленную константу. Хотя обычно рекомендуется объявлять объекты, подобные вашим, с помощью const, целая точка этого действия - разрешить объекты мутировать, не позволяя их переназначать. Вы переназначаете объект (таким образом, победив цель const), поэтому вместо этого используйте let.

let path = require('path'); 
// Good to go! 
Смежные вопросы