今天和你们唠唠NodeJs和Javascript有什么区别这个问题,写下文章以前,百度了网上的各类回答,看到如下一些经典的回答:node
一、node.js是平台,Js是编程语言;
二、js是客户端编程语言,须要浏览器的JavaScript解释器进行解释执行;
三、node.js是一个基于Chrome JavaScript运行时创建的平台,它是对Google V8引擎进行了封装的运行环境;
四、node.js就是把浏览器的解释器封装起来做为服务器运行平台,用相似JavaScript的结构语法进行编程,在node.js上运行。
复制代码
嗯嗯不错(😏似懂非懂的样子),合上书又马冬梅了....最近听了一位老师的课传授了两个学习方法:学会提问和科学思考,今天就问这两个方法!寻找问题的答案!经过提问,一步步逼出真相,而后壁咚它。面试
看到这句经典的回答,开始小朋友的第一个问号:编程
❓他们之间的区别是语言和平台? 难道node就不是语言?它只是一个平台?你给我说说语言是个啥?后端
(小朋友问好可真多...)浏览器
咱们知道在计算机的世界里,只懂0和1,而咱们人类使用的是天然语言。要想计算机和人类进行沟通,计算机懂的语言不适合人类读,人类的天然语言计算机也很差识别。欸,那就适中,编程语言,能让人类经过简单的学习看的懂,也经过一些手段让计算机看的懂。人类学习编程语法,机器编译过程。bash
❓那编译过程都包括啥过程?服务器
编译过程包括词法分析,语法分析和语义分析。编程语言
(1)词法分析函数
词法,一些单词(词)加一些规律分类(法)。有下面几种分类:学习
好了,这时候小问号要抛出一个关键的问题了!
❓若是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是平台的时候是考虑上了语义。所以须要辩证地看待这句话,最重要的是知道当你认为它是错的时候,你能说出理由,当你说它对的时候也能说出因此然。
经过提问,咱们一步一步地逼出真相,直至和咱们已有的知识联系到了一块儿,这样,可以造成知识的体系(就不容易马冬梅啦),最后经过科学的思考,辩证的看待别人给出的答案,能说出你认为正确和错误的缘由。
为你提供了回答这个问题的新的角度,不知道对你有没有帮助呢哈哈,面试的时候就能够和面试官唠唠啦,最后,这是个人第一篇掘金文章,喜欢的话,不要你吝啬的点赞和评论哦哈哈,但愿以后能分享更多的知识哈哈~