javascript声明报错是编译错误还是执行错误?

为什么写这篇文章:

前两天有个架构师问了我这个问题,真的不想解释:原因很简答,如果对js有稍微一丁点的了解,绝不会问这种问题。。。

首先:要了解两个概念:

动态类型语言和静态类型语言:

静态类型语言:

常见 语言:Java和C、C++;

这些语言要严格执行两个过程:

1,编译 2,执行
下面这张图足够说明这两个过程(java):


图片.png

那么js呢?

Javascript是一门典型的动态类型语言:

在 JavaScript 中,当我们对一个变量赋值时,显然不需要考虑它的类型,因此,JavaScript是一门典型的动态类型语言。动态类型语言对变量类型的宽容给实际编码带来了很大的灵活性。由于无需进行类型检测,我们可以尝试调用任何对象的任意方法,而无需去考虑它原本是否被设计为拥有该方法。
这就好像你在菜市场买了一串羊肉串,等吃到嘴里,你才知道是不是羊肉,嘿嘿嘿。。。

既然问题提出来了,就索性总结一下这两种语言的优缺点:

静态类型语言的优点:

  1. 在编译时就能发现类型不匹配的错误,编辑器可以帮助我们提前避免程序在运行期间有可能发生的一些错误。
  2. 如果在程序中明确地规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高程序执行速度。

静态类型语言的缺点:

  1. 迫使程序员依照强契约来编写程序,为每个变量规定数据类型,归根结底只是辅助我们编写可靠性高程序的一种手段,而不是编写程序的目的,毕竟大部分人编写程序的目的是为了完成需求交付生产。
  2. 类型的声明也会增加更多的代码,在程序编写过程中,这些细节会让程序员的精力从思考业务逻辑上分散开来。

动态类型语言的优点:

  编写的代码数量更少,看起来也更加简洁,程序员可以把精力更多地放在业务逻辑上面。虽然不区分类型在某些情况下会让程序变得难以理解,但整体而言,代码量越少,越专注于逻辑表达,对阅读程序是越有帮助的。

动态类型语言的缺点:

  无法保证变量的类型,从而在程序的运行期有可能发生跟类型相关的错误。

那么js有哪几种错误类型呢?

打开mdn会发先很多,但是无外乎以下几种:
1,Permission denied to access property
尝试访问无权访问的对象。(违背同源策略)
2,InternalError: too much recursion
内部错误。(过于深层的递归或无尽递归)
3,RangeError
量程误差(精度,范围)
4,ReferenceError
引用错误(赋值。声明、作用域)
5,SyntaxError
语法错误(你懂的,尤其是新手)
6,TypeError
类型错误(你懂的)
7,URIError
URI 错误(URI 编码和解码不成功)
8,Warning
警告(js一般执行不会中断,可是后台一般看不懂,可以没事调戏他们一下)

所以,小伙伴们,你看懂了么???

你可能感兴趣的:(javascript声明报错是编译错误还是执行错误?)