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

闲话在前


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

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

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

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

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

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

 

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

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

❓你说JS是编程语言,那你给我说说语言是个啥?

 

编程语言

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

❓那编译过程都包括啥过程?

 

编译过程

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

(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是平台的时候是考虑上了语义。因此需要辩证地看待这句话,最重要的是知道当你认为它是错的时候,你能说出理由,当你说它对的时候也能说出所以然。

 

总结

通过提问,我们一步一步地逼出真相,直至和我们已有的知识联系到了一起,这样,能够形成知识的体系(就不容易马冬梅啦),最后通过科学的思考,辩证的看待别人给出的答案,能说出你认为正确和错误的原因。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值