js 全称是 javascript,它既不是 java 的嫡系,也不单单是一门脚本语言(script 直译)。

暮色

编程语言的强大程度决定于它能使用的场景和所能处理的事情,比如现在这么多软硬件程序,都需要编程语言来编写程序逻辑使之能够提供功能。也因为使用场景之多以及环境之复杂,所以才诞生了不同的编程语言去处理不同的场景事务,就好比人类的职业划分是为了让人类根据自身属性不同去承担不同范围的工作。

编程语言自诞生之初就是对人类世界的一种抽象。不同的编程语言(用于人类编写程序的计算机语言)都是对于计算机所能识别的基础指令的一些封装,语言之不同在于封装形式之不同。比如一个人,既能当警察,也能做医生,还能教书育人当老师,那么这个人可不可以这些都做,可以。但也有人选择只做一件事情。

新月

编程语言也类似,一种编程语言既可以用于浏览器编程,也可以用于服务器编程,还可以用于家用电器内部程序的硬件编程,那它可不可以都做呢,可以。

但大多数人的记忆中,js 还是仅适用于浏览器编程的。那么为什么 js 还可以用于浏览器以外的环境进行运行呢,这依赖于其所运行的宿主环境,也就是一个托盘。就好像你用微波炉加热一盘菜,你直接把菜倒在微波炉里加热,虽然菜能热,但是没法吃了,但如果你把菜放在一个盘子里,再把盘子放进微波炉加热,这样微波炉就能很好地服务于你。

js 在各种环境运行也如此,既然服务器没有解析 js 的先天功能,就用服务器能解析的 c++写一套环境,然后这套环境里定义了解析 js 的规则,从而使得放在这个环境里的 js 可以为服务器所运行,这个环境就叫做 nodejs。

那么其他环境呢,比如硬件设备,都可以拥有类似于 nodejs 的环境来使得 js 可以成为程序界的通用语言。但是功劳在于这些环境,也就是 js 引擎。那么当 js 可以变得如此通用,畅行于程序的世界,就不禁想到,js 于编程语言,正如英语于人类语言一般。

比如你学英语,那么你走到世界大部分地区,都是能够与当地交流的,因为各个国家基本都拥有会英语的人,这些人就相当于 js 引擎,也就是中间翻译者,他们能听懂英语,就可以提供你要的服务。

月食

那么为什么有这样通用语言存在的必要呢?我们反过来想,假如你去日本要学日语,你去法国要学法语,你去俄罗斯要学俄语,那岂不是你每去一个国家都要提前花时间学一门新的语言,这样成本很高,而且没必要。

但是如果你学习一门国际上认可的通用人类交流语言,也就是英语,那么你基本上可以畅行无阻,岂不美哉。

那么回到编程语言上,js 目前就有成为编程语言界通用语言存在的趋势,因为当你编写运行在浏览器的程序之时,你会使用 js,曾几何时你可能还可以选择另外一种语言叫 jscript,但随着历史的发展,它已经被 js 挤下去消亡了,就像百度外卖一样。

然后当你编写服务端程序的时候,如今你同样可以使用 js,曾经你的选择可能会是 java、c、c++、c#、python、go 等等,但如果告诉你,他们能做的事情 js 都能做,你会不会感到高兴,因为你只会英语(只会 js)。

破晓

曾经 js 只被当作一门玩具语言,因为它仅用于处理客户端一些简单不重要的逻辑,大多数用户使用的程序功能都是由服务端所提供的。但是现如今 nodejs 告诉你,我可以帮助你把 js 写的逻辑运行在服务器环境,你是不是可以考虑把前后端编程语言统一为 js 一种。

那么当你开始心动,决定只用这一种语言编写程序的时候,不禁会想,它真的能完全取代别的语言,实现它们所提供的功能吗,那么便需要讨论到第二部分,即 js 所具备的功能。

比如 java 可以利用计算机操作系统所提供的多线程来共用同一进程的内存资源,从而提高程序运行效率,同时处理多项事务的能力,那么 js 可以吗?

预知后事如何,且听下回分解。