[英]What triggers JavaScript code execution?
如果您不知道我在說什么,請閱讀John Resig - JavaScript定時器如何工作以及JavaScript是否保證是單線程的?
有幾個觸發器將JS引擎執行FiFo中的任務排入隊列。 這不是任何標准的一部分,所以我試圖找到這些觸發器的詳盡列表。 (我想這一切都歸結為內部事件處理程序,如腳本加載事件或計時器事件 ,但我寧願忽略引擎的內部結構,從用戶的角度來看待事物。)
到目前為止我已經確定了
<script>
元素(包括document.write
添加的元素)* <script>
元素* window.setTimeout
window.setInterval
*)僅在Browser / DOM環境中
還有嗎? JS引擎之間有什么區別嗎?
“JavaScript”作為一種語言名稱不應該被真正使用它太寬泛。
ECMAScript就是你所指的。 您可以在http://www.ecmascript.org/上找到有關ECMAScript的信息。語言標准稱為ECMA-262,大多數瀏覽器都支持5.1版。
setTimeout,setInterval,DOM事件等不是語言的一部分。 這些由主機環境作為主機對象提供。 在使用主機對象時,應特別注意為各種主機環境編寫ECMAScript。
ECMAScript代碼在執行上下文中執行。 這采用堆棧的形式,並將當前執行上下文的狀態保持在頂部。
推送執行上下文有3種方法。 全局代碼,評估和功能。 這是啟動代碼的唯一方法。 主機環境將使用這些方法來執行代碼。
主機環境可以提供調用堆棧。 這用於堆棧由可能在獨立線程中運行的主機對象生成的函數調用。 通常,諸如setTimeout之類的事件將向調用堆棧添加函數。 然后主機環境將等待執行上下文堆棧為空,然后從調用堆棧彈出函數,創建新的執行上下文,執行代碼直到完成。 它將重復此操作,直到調用堆棧為空。
嘗試構建主機對象執行上下文管理器的完整列表是徒勞的。
回答問題。
還有嗎? 是的,還有更多。 這超出了這個答案的范圍。 請參閱您要使用的特定主機環境。
JS引擎之間有什么區別嗎? (ECMAScript主機環境)。 是。 這再次超出了這個答案的范圍並依賴於主機
有許多主機環境,新的環境一直在創建。 觸發創建新執行上下文的因素在很大程度上取決於主機環境。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.