到目前為止,同學(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)了你的代碼!
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26