Javascript在try块中设置const变量

问题描述 投票:16回答:4

在ES6中是否可以在严格模式下使用try{}const中设置变量?

'use strict';

const path = require('path');

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

console.log(configPath);

这没有lint,因为configPath被定义为超出范围。这似乎有用的唯一方法是:

'use strict';

const path = require('path');

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

console.log(configPath);

基本上,无论如何在这种情况下使用const而不是let

javascript node.js ecmascript-6 try-catch
4个回答
49
投票

将变量声明为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);

或者,尽管可能更容易混淆,但您可以使用vartry中创建变量并在其外部使用它,因为var的范围在函数范围内,而不是块(并获取hoisted):

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

console.log(configPath);

3
投票
'use strict';

const path = require('path');

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

console.log(configPath);

1
投票

我会尝试使用let的临时变量,并在const / try和'删除'临时变量之后将其分配给catch变量。

'use strict';

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

const configPath = temp;
temp = undefined;

console.log(configPath);

0
投票

使用let。你不能使用constconst不允许您重新分配声明的常量。虽然通常使用const声明像你这样的对象是一种好习惯,但这样做的全部意义在于允许对象进行变异而不允许重新分配它们。你正在重新分配对象(因此,击败了const的目的),所以请改用let

let path = require('path');
// Good to go!
© www.soinside.com 2019 - 2024. All rights reserved.