尝试/捕获不会捕获声明的常量错误

时间:2018-10-01 12:12:19

标签: javascript ecmascript-6 try-catch constants

你们中的一些人制作了一些很棒的javascript课程,我渴望在这个冒险中成为更好的开发人员。

其中一门课程是关于EcmaScript6 const和let变量以及Try and Catch语句的。因此,作为一个好奇的初级开发人员,我自己通过在常量中声明箭头功能并尝试更改常量来进行尝试:

const userValidation = (userValid) => userValid == true ? "You may enter" : "You may not enter, sorry.";

try {
  var userValidation = function(userID) {
    //Execute some code which ofcourse will never execute
  }
}
catch(err) {
  console.log("Woops, something went wrong.");
}

console.log(userValidation(false));

我期望的行为是错误消息:“糟糕,出了点问题。”因为我已经声明了常量“ UserValidation”。但这不是正在发生的事情,而是控制台只是给出了错误并消失了:

Console error

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

尝试,使用catch语句捕获运行时错误,但是在解析Javascript之前(运行之前)会检测到此SyntaxError。这是因为您不是在这里重新分配(const)变量,而是使用其他标识符(var)重新定义它。如果代码是

const userValidation = (userValid) => userValid == true ? "You may enter" : "You may not enter, sorry.";

try {
  userValidation = function(userID) {
    //Execute some code which ofcourse will never execute
  }
}
catch(err) {
  console.log("Woops, something went wrong.");
}

如果没有var标识符,则将成为运行时错误。该代码将尝试重新分配const变量,并且您的catch语句将执行。