是的,這是一個初級問題:我看到JavaScript在瀏覽器中運行。那麼,每個瀏覽器都是一種虛擬機(比如在java中)來運行javascript代碼呢?我不能以任何形式「編譯」JavaScript?這是瀏覽器對JavaScript的虛擬機的一種嗎?
回答
沒錯,你不能將JavaScript編譯成其他任何東西。瀏覽器爲你編譯它,然後運行它。一些瀏覽器比其他瀏覽器有更復雜的JavaScript編譯器。
每個瀏覽器窗口以及該窗口內的每個瀏覽器框架都是它自己的HTML/JavaScript執行引擎(類似於虛擬機)。它們並不是完全獨立的,因爲(受到一些安全限制),它們可以相互通信並且可以相互瞭解,但它們每個都有它們的執行狀態,它們自己的全局變量,它們自己的代碼,它們的自己的事件處理程序等...
Javascript代碼並沒有真正編譯C/C++代碼編譯的意義。瀏覽器只接受文本形式的javascript。瀏覽器然後解釋那個文本。不同的瀏覽器有不同的方式來解釋JavaScript文本,以儘可能快地執行。它不會像C/C++代碼那樣直接編譯爲純機器語言,而是編譯(或更改)爲解釋器可以比純文本更快地執行的東西。
[V8引擎](https://en.wikipedia.org/wiki/V8_(JavaScript_engine))JIT編譯爲機器碼。 –
@GregHewgill - 它不能被編譯成純機器代碼,除非幾乎每一個語句都只是對某個JS解釋器函數的函數調用,因爲JavaScript沒有像機器代碼那樣的硬類型。例如,當我在JS中寫入x + = 5時,編譯的結果不能是機器代碼,以便將某個寄存器或某個堆棧變量添加到像它的C/C++中。 – jfriend00
實際上,瀏覽器裏面有一個JavaScript Engine。該引擎讀取並執行JavaScript代碼。所以,這是一個(根本不編譯)
- 1. Javascript/HTML手機瀏覽器模擬器
- 2. 是否有一個JavaScript的虛擬機?
- 3. MustOverride是一種虛擬方法嗎?
- 4. PHP在新的虛擬主機上未被瀏覽器解釋
- 5. Javascript虛擬機
- 6. 這是依賴於瀏覽器的JavaScript代碼嗎?
- 7. 淘汰賽虛擬元素瀏覽器
- 8. 我們可以在虛擬機中安裝多個瀏覽器
- 9. 通過瀏覽器運行虛擬機(作爲CGI)
- 10. 未在瀏覽器中檢測到AVFoundation CoreMedaIO虛擬相機
- 11. 如何從瀏覽器訪問虛擬機(Window server 2008)?
- 12. 如何從主機瀏覽器訪問虛擬機內部的網頁?
- 13. 在虛擬瀏覽器中運行javascript和html
- 14. Javascript:是一個空虛的對象是一個虛假的對象嗎?
- 15. 手機瀏覽器模擬器
- 16. 這是一種在JavaScript中擴展對象的新方法嗎?
- 17. 使用另一臺linux虛擬機訪問虛擬linux機器
- 18. 對Facebook使用虛擬綜合瀏覽器像素代碼
- 19. 用IP地址瀏覽的Apache虛擬主機
- 20. 如何從虛擬機中瀏覽端口8080上的頁面?
- 21. Glassfish/JBoss/Geronimo是虛擬機嗎?
- 22. 虛擬主機內的虛擬主機
- 23. 虛擬機中的虛擬機 - 網絡
- 24. 使用瀏覽器和訪問的Apache2虛擬主機的Linux O/S
- 25. 這個javascript崩潰我的瀏覽器
- 26. 什麼是android瀏覽器虛擬CSS解析?
- 27. 瀏覽器中的JavaScript支持BitmapData嗎?
- 28. PHP + MySQL支持這種樣式的虛擬表連接嗎?
- 29. 瀏覽器將顯示這種錯誤
- 30. AutoIt3無法將文本發送到虛擬機上的Windows瀏覽對話框
@aviad:[V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine))和[SpiderMonkey]等作者的作者(https://en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine))會不同意。 –
@aviad他們大多數做JIT編譯(這是格雷格正在談論的) –
@Greg Hewgill,在某些情況下,它是兩遍解釋而沒有編譯。它依賴於瀏覽器。查看WebKit的SquirrelFish Extreme和Google V8以查看最快的事情,並查看Mozilla的JaegerMonkey。 AFIAK V8和SFX是JIT,因此它們將JS代碼編譯爲本地代碼。 JaegerMonkey和TraceMonkey在Firefox中結合,形成一個系統,如果代碼被追蹤得更快,TraceMonkey就會執行它,如果代碼的本地速度更快,JaegerMonkey就會編譯它,就像SFX – aviad