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
を使用することはありますか?
変数をconst
として宣言するには、値をすぐにポイントする必要があり、この参照は変更できません。
つまり、1つの場所(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
がブロックではなく関数内でスコープされるため、変数の外部で使用できます。 (そして hoisted )を取得します:
try {
var configPath = path.resolve(process.cwd(), config);
} catch(error) {
//.....
}
console.log(configPath);
'use strict';
const path = require('path');
const configPath = (function() {
try {
return path.resolve(process.cwd(), config);
} catch (error) {
//.....
}
})()
console.log(configPath);
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);
let
を使用const
は使用できません。 const
では、宣言された定数を再割り当てできません。 const
を使用してオブジェクトのようなオブジェクトを宣言することは一般的に良い習慣ですが、そうすることの全体のポイントはオブジェクトの変更を許可することですそれらの再割り当てを許可しません。オブジェクトを再割り当てするため(const
の目的を無効にします)、代わりにlet
を使用します。
let path = require('path');
// Good to go!