一直沒回答清楚的一道面試題-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是平臺的時候是考慮上了語義。所以須要辯證地看待這句話,最重要的是知道當你認爲它是錯的時候,你能說出理由,當你說它對的時候也能說出因此然。

總結

經過提問,咱們一步一步地逼出真相,直至和咱們已有的知識聯繫到了一塊兒,這樣,可以造成知識的體系(就不容易馬冬梅啦),最後經過科學的思考,辯證的看待別人給出的答案,能說出你認爲正確和錯誤的緣由。

爲你提供了回答這個問題的新的角度,不知道對你有沒有幫助呢哈哈,面試的時候就能夠和麪試官嘮嘮啦,最後,這是個人第一篇掘金文章,喜歡的話,不要你吝嗇的點贊和評論哦哈哈,但願以後能分享更多的知識哈哈~

相關文章
相關標籤/搜索