Javascript在try block 内设置const变量

标签 javascript node.js ecmascript-6 try-catch

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

'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 要求您立即将其指向一个值,并且此引用不能更改。

这意味着你不能在一个地方(try 之外)定义它并在其他地方(try 内部)为它分配一个值。

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

另一方面,在 try block 中创建它并给它一个值都可以。

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

然而,const 是 block 范围的,就像 let,所以如果你创建它并在你的 try block 中给它一个值,它只会存在于那个范围内。

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范围在函数内,而不是 block 内(并获得 hoisted ):

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

console.log(configPath);

关于Javascript在try block 内设置const变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40925094/

相关文章:

javascript - 在 Javascript 中重新启动 SetInterval

javascript - 根据滚动位置更改 CSS 参数

javascript - 使用javascript继承

javascript - Javascript/Html 中的复选框

javascript - 将一个属性应用于多个数组中的每个元素,然后返回一个包含一个数组的平面图

node.js - 如何在node js和sequelize之外使用promise返回数据?

javascript - 在 JavaScript 中使用正则表达式验证首字母缩写

javascript - Firebase 身份验证为自定义 token 设置自定义过期时间

javascript - 通过 id 从列表中检索多个项目

javascript - 有没有办法将这两行合二为一?