web-dev-qa-db-ja.com

tryブロック内のJavaScript設定const変数

ES6では、ストリクトモードでconstを使用してtry{}内に変数を設定できますか?

'use strict';

const path = require('path');

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

console.log(configPath);

configPathがスコープ外で定義されているため、これはlintに失敗します。これが機能するように見える唯一の方法は、以下を実行することです。

'use strict';

const path = require('path');

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

console.log(configPath);

基本的に、とにかくconstの代わりにletを使用することはありますか?

21
Justin

変数をconstとして宣言するには、値をすぐにポイントする必要があり、この参照は変更できません。

つまり、1つの場所(tryの外側)で定義して、別の場所(tryの内側)に値を割り当てることはできません。

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

一方、tryブロック内で値を作成して値を与えることは問題ありません。

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

ただし、constletと同様にブロックスコープであるため、作成して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);
58
nem035
'use strict';

const path = require('path');

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

console.log(configPath);
6
steph643

letで一時変数を使用し、const/tryの後にcatch varに割り当てて、一時変数を「削除」しようとします。

'use strict';

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

const configPath = temp;
temp = undefined;

console.log(configPath);
1
yunzen

letを使用constは使用できません。 constでは、宣言された定数を再割り当てできません。 constを使用してオブジェクトのようなオブジェクトを宣言することは一般的に良い習慣ですが、そうすることの全体のポイントはオブジェクトの変更を許可することですそれらの再割り当てを許可しません。オブジェクトを再割り当てするため(constの目的を無効にします)、代わりにletを使用します。

let path = require('path');
// Good to go!
0
Kyle Lin