在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
?
将变量声明为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);
或者,尽管可能更容易混淆,但您可以使用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
变量。
'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!