簡體   English   中英

當瀏覽器中的某些行發生錯誤時,有多少JavaScript停止工作?

[英]How much of JavaScript stops working when an errors occur in some line in the browser?

網頁中的JS由多個標記組成,這些標記可以加載文件並執行它們,或者在內聯標記的情況下直接執行代碼。 現在假設其中一個由於錯誤而停止在某個特定行上執行,其他腳本是否也會停止? 換句話說,在發生錯誤時暫停解釋和執行一段代碼的瀏覽器操作是在標簽級別還是全局級別完成的?

換句話說,在發生錯誤時暫停解釋和執行一段代碼的瀏覽器操作是在標簽級別還是全局級別完成的?

那要看。

語法錯誤意味着由給定script標記加載的整個腳本將無法工作,因為無法解析代碼。

運行時錯誤僅表示發生錯誤時發生的任何事情都將終止(如果它沒有處理錯誤)。 但只有在錯誤發生時正在運行的作業才會終止; 由該相同script標記加載的其他代碼將繼續工作。

示例:此代碼中包含語法錯誤,因此所有代碼都不起作用:

 document.getElementById("btn").addEventListener("click", function() { console.log("Clicked"); }, false); // This is the syntax error: if 
 Clicking this button doesn't do anything: <br><input type="button" id="btn" value="Click me"> 

然而,在連接第一個事件處理程序和掛接第二個事件處理程序之間存在運行時錯誤。 因此,第二個處理程序從未連接,但第一個繼續工作:

 document.getElementById("btn1").addEventListener("click", function() { console.log("Button 1 clicked"); }, false); // This is the runtime error: null.foo(); document.getElementById("btn2").addEventListener("click", function() { console.log("Button 2 clicked"); }, false); 
 <div>Clicking this button works:</div> <input type="button" id="btn1" value="Button 1"> <div>Clicking this button doesn't do anything:</div> <input type="button" id="btn2" value="Button 2"> 

在這兩種情況下,這只會影響該script元素加載的代碼,因為運行它是一項工作; 運行任何后續script元素的內容是一項新工作。 所以第一個第三個按鈕在這里工作,但第二按鈕沒有,因為第三按鈕由一個單獨的工作連接:

 <div>Clicking this button works:</div> <input type="button" id="btn1" value="Button 1"> <div>Clicking this button doesn't do anything:</div> <input type="button" id="btn2" value="Button 2"> <div>Clicking this button works:</div> <input type="button" id="btn3" value="Button 3"> <script> // First job document.getElementById("btn1").addEventListener("click", function() { console.log("Button 1 clicked"); }, false); // This is the runtime error: null.foo(); document.getElementById("btn2").addEventListener("click", function() { console.log("Button 2 clicked"); }, false); </script> <script> // Second job document.getElementById("btn3").addEventListener("click", function() { console.log("Button 3 clicked"); }, false); </script> 

當然,如果后續script依賴於早期script某些不起作用的東西,那么它就無法正常工作 - 但代碼將(嘗試)運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM