const是一个块级变量,所以当我尝试怀疑代码时
try{
const foo = bar[global.name].foofoo[global.name2];
}catch (err){
console.log(error(err.message));
}
const隐藏在{}
但是
const foo ;
try{
foo = bar[global.name].foofoo[global.name2];
}catch (err){
console.log(error(err.message));
}
无法正常工作,因为const
必须是声明初始化
那么我应该如何在const
阻止中使用try..catch
?
答案 0 :(得分:13)
你已经击中了头部,因为区块范围你不能在try catch块中声明const
并在块之外使用它。
你有 2 3个选项:
使用let
:
let foo;
try{
foo = bar[global.name].foofoo[global.name2];
}catch (err){
console.log(error(err.message));
}
或者如果在try catch块之后只有很少的代码,和这一切都取决于try
的成功,你可以把剩下的try
中的代码:
try{
const foo = bar[global.name].foofoo[global.name2];
return foo;
}catch (err){
console.log(error(err.message));
}
修改强>
选项3的灵感来自@Yury Tarabanko的评论:如果可能的话将try catch部分模块化为自己的函数,其输出应该是新const
的值:
function trycatch() {
try {
return bar[global.name].foofoo[global.name2];
} catch (err) {
console.log(error(err.message));
return undefined; // or whatever you want
}
}
const foo = trycatch(); // === bar[global.name]... if succeeded, otherwise === the return value from the catch block