一直没回答清楚的一道面试题-NodeJs和JavaScript有什么区别

闲话在前

今天和你们唠唠NodeJs和Javascript有什么区别这个问题,写下文章以前,百度了网上的各类回答,看到如下一些经典的回答:node

一、node.js是平台,Js是编程语言;

二、js是客户端编程语言,须要浏览器的JavaScript解释器进行解释执行;

三、node.js是一个基于Chrome JavaScript运行时创建的平台,它是对Google V8引擎进行了封装的运行环境;

四、node.js就是把浏览器的解释器封装起来做为服务器运行平台,用相似JavaScript的结构语法进行编程,在node.js上运行。

复制代码

嗯嗯不错(😏似懂非懂的样子),合上书又马冬梅了....最近听了一位老师的课传授了两个学习方法:学会提问和科学思考,今天就问这两个方法!寻找问题的答案!经过提问,一步步逼出真相,而后壁咚它。面试

壁咚”node.js是平台,Js是编程语言“

看到这句经典的回答,开始小朋友的第一个问号:编程

他们之间的区别是语言和平台? 难道node就不是语言?它只是一个平台?你给我说说语言是个啥?后端

(小朋友问好可真多...)浏览器

编程语言

咱们知道在计算机的世界里,只懂0和1,而咱们人类使用的是天然语言。要想计算机和人类进行沟通,计算机懂的语言不适合人类读,人类的天然语言计算机也很差识别。欸,那就适中,编程语言,能让人类经过简单的学习看的懂,也经过一些手段让计算机看的懂。人类学习编程语法,机器编译过程。bash

那编译过程都包括啥过程?服务器

编译过程

编译过程包括词法分析,语法分析和语义分析。编程语言

(1)词法分析函数

词法,一些单词(词)加一些规律分类(法)。有下面几种分类:学习

  • 关键字:就是例如function、var、return、if、else
  • 标识符:例如在var a = 1; a就是标识符,简单理解成变量。
  • 分界符,例如在function run(a,b){a++} 这里面的() {}就是分界符,这里的括号花括号就划分了参数和函数体,让咱们知道哪些是参数哪里是函数体
  • 运算符:这里就不展开描述了,就是+ 、- 、*等各类运算符拉

好了,这时候小问号要抛出一个关键的问题了!

若是X语言和Y语言词法相同,那么X和Y语言是同一种语言吗?为何?

(2)语法分析

相信你们都知道答案是否认,由于他们的语法分析不同。例如x语言就是要用if来定义变量,用function来作条件语句,那也是奈它不何。其实语法分析编译了以后的结构有三元式或四元式这样的命令结构,定义变量是一种结构,定义方法是一种结构,语法分析就是把咱们的语言翻译成短语或者命令语句。具体的你们能够参考其它资料,这里不详细展开。

这时候小朋友要抛出一个快逼出真相的问号了!

若是X语言和Y语言词法结构和语法结构都相同,那么X语言和Y语言是同一种语言吗?

回到咱们对比NodeJs和Javascript的区别,他们词法和语法都是同样的呀!!!可是它是同一种语言吗?在回答这个问题以前,咱们先来看看什么语义分析。

(3)语义分析

咱们的程序运行在操做系统上,不是直接运行在硬件上,所以操做系统不支持的功能咱们经过代码编程也干不了。那操做系统有啥功能,可以执行啥,那就是要看操做系统暴露出来哪些接口。不论是什么语言,最后都是调用操做系统上面的接口,也就是一些操做系统的命令。

那咱们反过来想,NodeJs运行在服务端,那它是什么系统,Linux系统。js运行在客户端,碰不到操做系统,并且是直接接触浏览器。因此它们的语义分析根本不可能会同样,好比你试试看让js读文件,看看它读不读。

壁咚结果

如今,咱们能够回答一个问题了,js和node是同一种语言吗?

显然,在严格意义上,他们不是同一种语言,由于他们的语义不一样,由于运行环境根本不一样。

那为何咱们又常常说他们是同一种语言呢?由于它们的词法分析和语法分析都同样,用起来写起来没什么距离感。

要知道为何相同为何又不一样。

所以,咱们说NodeJs是平台,JavaScript是语言,如何理解这句话呢?

若是说JavaScript是语言,不如说它是一种语法,这种语法能够做用在浏览器上造成浏览器端的js语言;而做用在NodeJs上,造成后端的js语言。 咱们说js是一种语言的时候是没有考虑到语义的,说node是平台的时候是考虑上了语义。所以须要辩证地看待这句话,最重要的是知道当你认为它是错的时候,你能说出理由,当你说它对的时候也能说出因此然。

总结

经过提问,咱们一步一步地逼出真相,直至和咱们已有的知识联系到了一块儿,这样,可以造成知识的体系(就不容易马冬梅啦),最后经过科学的思考,辩证的看待别人给出的答案,能说出你认为正确和错误的缘由。

为你提供了回答这个问题的新的角度,不知道对你有没有帮助呢哈哈,面试的时候就能够和面试官唠唠啦,最后,这是个人第一篇掘金文章,喜欢的话,不要你吝啬的点赞和评论哦哈哈,但愿以后能分享更多的知识哈哈~

相关文章
相关标签/搜索