到目前為止,同學(xué)你知道了JavaScript的歷史,也了解其“你想是啥就是啥”的變量系統(tǒng)。相信憑借你深厚的Java或者C++功底,再加上程序員特有的自傲氣質(zhì),你肯定會(huì)信心滿滿:自信寫(xiě)JavaScript毫無(wú)壓力。我也相信寫(xiě)個(gè)Script對(duì)于后端攻城師們那肯定不在話下。但是,當(dāng)結(jié)果匪夷所想的時(shí)候,你或許會(huì)一番吐槽:真TM見(jiàn)鬼了,會(huì)不會(huì)是什么bug?還是瀏覽器有問(wèn)題?我的代碼邏輯沒(méi)問(wèn)題啊......。就像如下代碼,你能說(shuō)出結(jié)果是什么嗎? 

var a=123;var b=999;function func(a){    var b;
  console.log(a);//?????? 結(jié)果是什么????留著分析
  var a=888;
  c=1111;function a(){
      }    console.log(a);//?????? 結(jié)果是什么????留著分析
  console.log(b);//?????? 結(jié)果是什么????留著分析
  console.log(c);//?????? 結(jié)果是什么????留著分析}func(456);

  是的,你的代碼沒(méi)有問(wèn)題,當(dāng)然瀏覽器也沒(méi)問(wèn)題。你或許說(shuō)我才不會(huì)寫(xiě)得滿屏都是“a”的代碼!講真的,當(dāng)你看到這段代碼的時(shí)候,你有沒(méi)有想過(guò)為什么JavaScript能夠這樣重復(fù)定義同名的變量?本樓敢打賭十個(gè)看客中,能有一個(gè)提出這個(gè)疑問(wèn),那已經(jīng)是驚喜了??赡苡腥藭?huì)說(shuō)“因?yàn)樗侨躅?lèi)型言語(yǔ)”,這個(gè)答案只能說(shuō)對(duì)了一半。這看似很不科學(xué)、很不嚴(yán)謹(jǐn)?shù)淖兞慷x,怎么能夠運(yùn)行起來(lái)呢?很明顯不科學(xué)。答案是:有人動(dòng)了你的代碼!

  有人動(dòng)了你的代碼!有人動(dòng)了你的代碼!有人動(dòng)了你的代碼!重要的事說(shuō)三遍!那是誰(shuí)動(dòng)了你的代碼呢?故事又開(kāi)始了。

  這事還得回到九十年代JavaScript出生那會(huì)。話說(shuō)布蘭登-艾奇當(dāng)時(shí)創(chuàng)造JavaScript的時(shí)候,他的需求就是做做客戶端的數(shù)據(jù)驗(yàn)證而已。于是乎,他想“這玩兒沒(méi)必要搞高能設(shè)計(jì),看上去好像也沒(méi)有什么地方需要高能運(yùn)算的,搞預(yù)編譯、鏈接器那是太浪費(fèi)了,再說(shuō)這玩兒是在瀏覽器上跑的,搞編譯器、鏈接器,那瀏覽器不成了IDE啦?最好能像Perl那樣,邊解析邊運(yùn)行最美不過(guò)”。鞋同們看到這里應(yīng)該明白了:那么多廢話,你就不是為了說(shuō)JavaScript是邊解析邊運(yùn)行的嘛!我懂的,這個(gè)課本上有說(shuō)。但是好多課本好像只說(shuō)了邊解析邊運(yùn)行,但是沒(méi)說(shuō)是怎么解析的,就算有說(shuō)了,那也是廢話比這篇博文還多,還說(shuō)不清楚。到此,前面高呼三聲那個(gè)問(wèn)題的答案,想必看官到此也看出答案了:解析器動(dòng)了你的代碼!

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式