至尊寶的傳說
2018-07-31 15:07:46
如下,為什么可以在函數(shù)f定義之前就調(diào)用呢?編譯器是如何處理的呢?f();function f(){
alert("hehe");
}
1 回答

慕的地6264312
TA貢獻1817條經(jīng)驗 獲得超6個贊
目前的編程語言分為編譯型語言和解釋行語言。
編譯型語言在程序執(zhí)行之前,有一個單獨的編譯過程,將程序翻譯成機器語言,以后執(zhí)行這個程序的時候,就不用再進行翻譯了。
而編譯后需要進行連接,結(jié)果沒有前置聲明,連接器無法知道對應符號的位置,因此無法將多個文件鏈接到一起。所以此類語言在使用對應的變量之前必須要進行對應的聲明。
解釋型語言,是在運行的時候?qū)⒊绦蚍g成機器語言,所以運行速度相對于編譯型語言要慢。目前的腳本語言基本都是解釋型語言,他們一般都有相應的腳本引擎來解釋執(zhí)行,他們一般需要解釋器才能運行。
由此,javascript
和php
等腳本語言理論上是根本不需要手動聲明的,因為解釋器會在執(zhí)行前把整個腳本加載到內(nèi)存中,抓取其中的聲明部分,然后進行處理對應的函數(shù)流程,然后再從頭開始執(zhí)行。這一過程稱為解釋。解釋器幫你做了許許多多的事情,比如申請內(nèi)存,釋放內(nèi)存,垃圾回收,線程同步,區(qū)域通信,變量管理等,區(qū)區(qū)聲明,自然不在話下。
以上。
添加回答
舉報
0/150
提交
取消