在 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
要求您立即将其指向一个值,并且此引用不能更改。
这意味着你不能在一个地方(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);
或者,虽然可能更令人困惑,但您可以使用 var
在 try
中创建一个变量并在它之外使用它,因为 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/