那為什么人們不參考它的功能開發(fā)一門新語(yǔ)言而是一直對(duì)它修改呢?
不是有TypeScript嗎?
老實(shí)說(shuō),JavaScript確實(shí)有很多問(wèn)題,包括內(nèi)存泄漏問(wèn)題,他都美名曰閉包了。
所以你會(huì)發(fā)現(xiàn),使用JavaScript,可以寫出很奇葩的功能,你也會(huì)發(fā)現(xiàn),腳本語(yǔ)言的代碼居然可以寫的這么難讀。
說(shuō)下JavaScript誕生史1995年4月,網(wǎng)景公司招聘了Brendan Eich
面試時(shí)是這樣的(非真實(shí)場(chǎng)景)
網(wǎng)景面試官:Hi,聽說(shuō)你最喜歡函數(shù)式編程。
Eich:超愛(ài)的,別看Java面向?qū)ο蟋F(xiàn)在火的很,那就是坨XX。
網(wǎng)景面試官:嗯,我們正好要找個(gè)程序員,和Scheme打交道,就你了。
一個(gè)月后是這樣的(非真實(shí)場(chǎng)景)
網(wǎng)景:Hi,Eich
Eich:Hi,Boss
網(wǎng)景:聽說(shuō)你是大神,最近Java很火,聽說(shuō)面向?qū)ο蠛芎茫銓憘€(gè)類似的面向?qū)ο蟮恼Z(yǔ)言,在網(wǎng)景瀏覽器上用吧
Eich:啥?聽說(shuō)都是不準(zhǔn)的
網(wǎng)景:你是說(shuō)你不是大神?
Eich:我不是說(shuō)這個(gè)
網(wǎng)景:那就這么定了
Eich:(心中萬(wàn)XX馬奔騰)
Eich心中的不滿程度,不亞于讀計(jì)算機(jī)專業(yè)出來(lái)做編程工作的你被親戚叫去幫忙修理洗衣機(jī)。
10天后,JavaScript誕生,是的,Eich只用了10天,創(chuàng)造了一個(gè)面向?qū)ο蟮恼Z(yǔ)言,然后里面最基礎(chǔ)的是函數(shù)……什么情況?是的,你說(shuō)它是面向?qū)ο螅梢岳^承,但是用原型的方法來(lái)繼承,一條長(zhǎng)長(zhǎng)的prototype鏈,最終又指向了Fuction……
Eich應(yīng)該只是為了完成任務(wù)而已,我想他一定很討厭這個(gè)兒子。
競(jìng)爭(zhēng)者但是網(wǎng)景在瀏覽器上使用上JavaScript后,一炮而紅,紅過(guò)Java。就這樣,一個(gè)爹不疼娘不愛(ài)的孩子,卻是社會(huì)上人人喜歡的小明星,你說(shuō)這是不是很諷刺。
然后微軟來(lái)了,抄襲JavaScript,弄了一個(gè)JScript,是的,其實(shí)你的問(wèn)題很早以前已經(jīng)有了,很多瀏覽器廠商已經(jīng)參考JavaScript,開發(fā)了一堆自己的瀏覽器腳本語(yǔ)言,所以當(dāng)時(shí)的網(wǎng)頁(yè)經(jīng)常是在這個(gè)瀏覽器可以運(yùn)行的很絢,在另一個(gè)瀏覽器就掛了。
標(biāo)準(zhǔn)制定者慢慢的,ECMA國(guó)際看不下去了,制定了ECMAScript標(biāo)準(zhǔn),然后和瀏覽器廠商說(shuō),你們得按我這個(gè)標(biāo)準(zhǔn)來(lái)開發(fā)腳本語(yǔ)言,不準(zhǔn)備亂加規(guī)則,亂定標(biāo)準(zhǔn)。
所以題主說(shuō)的JavaScript應(yīng)該是按ECMAScript5的標(biāo)準(zhǔn)的。目前最流行的標(biāo)準(zhǔn)是ECMS6標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)的語(yǔ)言,統(tǒng)稱為ES6,里面看起來(lái)就比較正常了,有模塊,有類等,當(dāng)然,最新的標(biāo)準(zhǔn)是ECMS2019。
如果按最新的標(biāo)準(zhǔn)來(lái)開發(fā)的話,妥妥一個(gè)高大上的語(yǔ)言,當(dāng)然,現(xiàn)在微軟和Google也出了自己的語(yǔ)言來(lái)代替,比如微軟出的TypeScript,你可以理解為它是ES6的超集,很多開發(fā)者是直接用TypeScript來(lái)進(jìn)行開發(fā)的,語(yǔ)法和C#差不多。
歷史問(wèn)題但是由于歷史問(wèn)題,我們必須把最新標(biāo)準(zhǔn)或用TypeScript開發(fā)的程序,編譯成ES5標(biāo)準(zhǔn),在瀏覽器上運(yùn)行,這主要問(wèn)題在于IE,當(dāng)然,這是另一個(gè)傳說(shuō)了。
就像是Android系統(tǒng)這么爛,Google為啥不直接替換了?因?yàn)橛袀€(gè)歷史原因。JavaScript也是一樣,歷史總是讓人不斷的蛋疼。
總結(jié)人們沒(méi)有改javascript,只是瀏覽器標(biāo)準(zhǔn)在不斷的定制,瀏覽器廠商需要去匹配瀏覽器標(biāo)準(zhǔn)已經(jīng)有語(yǔ)言替換了,比如微軟公司的TypeScript,開發(fā)可以完全用它來(lái)開發(fā),不過(guò)最終還是得編譯成瀏覽器標(biāo)準(zhǔn)語(yǔ)言ECMA也會(huì)從TypeScript中吸取優(yōu)質(zhì)內(nèi)容,做為標(biāo)準(zhǔn)