我不是 JavaScript 程序员,所以这可能是一个非常基本的问题。问题是当出现一些特定的语法错误时,整个 JS 代码将无法工作。
由于 JS 是被解释的,我认为它应该独立执行每一行,直到错误发生,但它似乎没有发生,至少在下面的情况下:
console.log('a')
consol.log('b') //intentional typo in "console"
console.log('c')
---- output ----
a
ReferenceError: consol is not defined
根据解释性语言应该如何工作,上面的例子听起来一切都很好。现在看一下以下错误:
console.log('a')
console.log('b' //intentionally didn't put the right parenthesis
console.log('c')
---- output ----
SyntaxError: missing ) after argument list
为什么不应该执行第一行?
注意:我用了https://playcode.io运行代码并在 Mozilla Firefox 上完成。
consol
不是一个syntax错误,这是一个runtime error.
语法定义了语言,使 Javascript 引擎理解你想要它做什么。console.log('b' console.log('c')
is 无效的语法,因为 Javascript 引擎无法判断您是否忘记了之间的某个运算符'b'
and console
或者这些是单独的陈述还是您想要的。
然而,consol.log()
是一个完全有效的命令,assuming某个名为consol
存在于运行时,在该行应该执行的时间点可能是也可能不是这种情况。只有到那时你才会发现。
JavaScript 总是解析和编译您为构建可运行程序而提供的整个代码。这是哪里语法错误发生。只有当整个代码的语法正确时,它才会执行该代码,这可能会也可能不会产生运行时错误.
由于 JS 是解释的,我认为它应该独立执行每一行
“解释”与此无关。拿着它:
while (foo) {
bar();
}
显然,它不能在这里独立执行每一行,因为这是一个复合结构。或这个:
foo();
function foo() {}
This function
需要解析并且hoisted before foo()
可以被执行。不,代码总是从上到下解析运行时之前.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)