Javascript 为什么调用丢失的函数时会发现错误,而不是错误的语句?
请参阅此代码:Javascript 为什么调用丢失的函数时会发现错误,而不是错误的语句?,javascript,Javascript,请参阅此代码: <!DOCTYPE html> <html> <body> <p id="P1"></p> <script> try { alllllllert("Hello.........!"); } catch(err) { document.getElementById("P1").innerHTML = err.message; } </script> </body>
<!DOCTYPE html>
<html>
<body>
<p id="P1"></p>
<script>
try {
alllllllert("Hello.........!");
}
catch(err) {
document.getElementById("P1").innerHTML = err.message;
}
</script>
</body>
</html>
当这个代码运行时,一个错误是caugth,我进入catch块
但是,以下代码中为什么没有出现这种情况:
<!DOCTYPE html>
<html>
<body>
<p id="P1"></p>
<script>
try {
int n = 3;
document.getElementById("P1").innerHTML = n;
}
catch(err) {
document.getElementById("P1").innerHTML = err.message;
}
</script>
</body>
</html>
编写int n=3无法在JavaScript上编译,我知道我需要编写var n=3。那么,为什么我不得到一个带有消息的异常呢?intn=3;无效语法,这会阻止对整个块进行分析
因此,您的catch块实际上并不存在。int n=3;无效语法,这会阻止对整个块进行分析
因此,您的catch块实际上并不存在。区别在于,在第一个示例中,alllllerthello。。。。。。。。。!;,您实际上拥有有效的JavaScript。这使得它成为一个运行时异常,因为代码仍然被正确解析,并且直到引擎实际尝试定位要调用的函数时才发现错误
第二个例子,int n=3;根本不是有效的JavaScript。这会导致解析器在运行代码之前吐出并抛出错误。Try/catch是只能捕获运行时错误的运行时构造。区别在于,在第一个示例中,alllllerthello。。。。。。。。。!;,您实际上拥有有效的JavaScript。这使得它成为一个运行时异常,因为代码仍然被正确解析,并且直到引擎实际尝试定位要调用的函数时才发现错误
第二个例子,int n=3;根本不是有效的JavaScript。这会导致解析器在运行代码之前吐出并抛出错误。Try/catch是只能捕获运行时错误的运行时构造。因为存在语法错误。代码甚至无法执行。想想这个比喻:为什么当我的汽车没有发动机时,发动机控制灯不闪烁?如果没有引擎,你甚至不能启动汽车,所以灯永远不会亮。因为语法错误不是异常,而是语法错误。因为运行时异常与编译器错误不同?因为你有语法错误。代码甚至无法执行。想想这个比喻:为什么当我的汽车没有发动机时,发动机控制灯不闪烁?如果没有引擎,你甚至不能启动汽车,所以灯永远不会亮。因为语法错误不是异常,而是语法错误。因为运行时异常与编译器错误不同?