2016-12-02 2 views
4

ES6の変数は、constをstrictモードで使用してtry{}の変数を設定できますか?Javascriptでtryブロック内にconst変数を設定する

'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を使用することがとにかくありますか?

+1

エラーがスローされた場合、 'console.log(configPath);で何が起こると思いますか? –

答えて

17

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 がfunct内にスコープされているため、try内に変数を作成してその変数を外部で使用するイオンではなく、ブロック(およびhoistedを取得します):

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

console.log(configPath); 
+0

すごく大変感謝しています。 – Justin

+0

@あなたを歓迎してくれて、喜んで助けてください – nem035

1

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

let path = require('path'); 
// Good to go! 
関連する問題