導航:首頁 > 編程語言 > js沒有按順序執行嗎

js沒有按順序執行嗎

發布時間:2025-06-15 19:40:42

1. html+javascript 執行順序問題

代碼一般是從上而下載入的,但是執行的順序可不一定是這樣!
setInterval("funcTime()",1000);
這個函數就是說,當這行版代碼讀完一權秒鍾之後再執行funcTime()為個函數;而funcTime()這個函數,在在之前就已經載入進來了,但是沒有執行,也就是說,光載入進來不被調用的話,這個函數是不執行的。所以setInterval("funcTime()",1000);和funcTime()編寫的順序,一般是可以互換位置的。
而<body onload="funcTime();">的意思就是說當頁面全部載入完成後,再執行funcTime()這個函數。也就是說,在沒載入完成這個網頁時,雖然載入到了<body onload="funcTime();">
這行代碼,也不會執行funcTime()為個函數。假設在載入到<body onload="funcTime();">
這行代碼後一個小時,整個頁面才載入完的話,funcTime()只能在這一個小時之後,才會執行。
不知道這么說,說明沒有!?

2. js中怎樣操作代碼執行的先後順序


這次給大家帶來JS中怎樣操作代碼執行的先後順序,JS操作代碼執行先後順序的注意事項有哪些,下面就是實戰案例,一起來看一下。
一、js--->單線程

??嚴格意義上來說,javascript沒有多線程的概念,所有的程序都是單線程依次執行的。

??1、什麼是單線程?

??通俗點說,就是代碼在執行過程中,另一段代碼想要執行就必須等當前代碼執行完成後才可以進行。我們拿一段代碼來解釋一下吧
for(var i=1;i<=3;i++){
setTimeout(function(){
console.log(i); //輸出:4,4,4
},0)
}
??我們來看一下上面的這段代碼,既然延時器時間設置為0,那麼應該執行一遍循環就應該立即列印出一個i,但是最終的列印結果為:4,4,4。之所以會出現上面的結果,正是因為js代碼是單線程應用。

??在執行過程中,先遇到for循環,for循環先進入線程。當i=1時,循環走到setTimeOut後,此時的for循環還沒有執行完成,setTimeOut就會被放入一個地方(線程池)等待執行。此時for循環繼續執行,當i=2時,for循環仍沒有執行完,這時的setTimeOut仍會被放在線程池中等待執行??依次類推,直到for循環轉完3遍後,for循環執行完了,此時線程空閑了,在線程池中等待執行的setTimeOut依次執行列印i,而for循環執行完成後,i變成了4,所以列印出了三個4。

??2、如果想要改變上面的狀況可以運用以下代碼
//將var變為let
for(let i=1; i<=3; i++){
setTimeOut(function(){
console.log(i); //輸出的結果為1,2,3
},0);
}
//用自執行函數進行包裹
for(var i=1; i<=3; i++){
!function(i){
setTimeOut(function(){
console.log(i); //輸出的結果為1,2,3
},0);
}(i)
}
二、js中的函數作用域和代碼的執行

??>>>函數作用域

我們先來了解一下以下幾個概念:

??1、在js語言中,沒有類似於c語言這樣的塊級作用域。

??2、js語言中的頂級作用域為window對象范圍內,稱為全局作用域,在全局作用域中聲明的變數為全局變數。

??3、js函數范圍內的變數只能在函數內部使用,函數外部無法使用,這樣的變數為局部變數。

??4、js函數可以嵌套,多個函數的嵌套構成了作用域的層層嵌套,這稱為js中的作用域鏈。

??5、js作用域鏈變數訪問規則:

????(1)、當前作用域內存在要訪問的變數時,則使用當前作用域中的變數。

??? (2)、當前作用域中不存在要訪問的變數時,則會到上一層作用域中尋找,直到全局作用域。

??>>>執行順序

??js代碼執行分為兩個部分:

??1、代碼的檢查裝載階段(預編譯階段),此階段進行變數和函數的聲明,但是不對變數進行賦值,變數的默認值為undefined。

??2、代碼的執行階段,此階段對變數進行賦值和函數的聲明。

看了上面的一些具體的概念,我們拿一段代碼進行舉例說明:
var a=1; //聲明了一個全局變數
function func(){
console.log(a); //輸出:undefined。列印a,而在func這個作用域中已經聲明了a變數,按照js的執行順序,此時的a並未被賦值。
var a=1;
console.log(a); //輸出:1。
}
func();
??看上面的代碼:第一個a輸出undefined。原因:js作用域鏈的訪問規則,當前作用域內存在要訪問的變數a,所以使用當前作用域中的變數。再根據js代碼的執行順序,此時的a只是聲明了而並未被賦值,默認為undefined,所以輸出undefined。
??而第二個a,輸出1,正是因為此時的a已經被聲明且被賦值,所以a輸出1。
相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!
推薦閱讀:
vue.js搭建圖書管理平台的技術解答

vue.js常用指令總結歸納

JS按鈕禁用和啟用使用詳解

3. JS事件綁定的事件是按照順序執行的嗎

JS綁定的同步事件是按照綁定順序執行的。W3C對此有相關規范,原文內容如下:

Events which are synchronous (sync events) are treated as if they are in a virtual queue in a first-in-first-out model, ordered by sequence of temporal occurrence with respect to other events, to changes in the DOM, and to user interaction. Each event in this virtual queue is delayed until the previous event has completed its propagation behavior, or been canceled.

簡單的翻譯一下:

同步事件被看做有一個虛擬的先進先出的隊列,按照綁定的時間的順序進行DOM操作或者用戶交互。每一個虛擬隊列中的事件都會一直等待直到他前面的那個事件傳播(冒泡或捕獲)結束或者被取消。

文檔地址:https://www.w3.org/TR/DOM-Level-3-Events/#sync-async

4. js如何同時執行多個相同程序

js是順序執行的,瀏覽器在執行到ajax的時候是不會等待ajax返回結果再繼續執行的,所以你那個問題應該是ajax請求後台與js執行之間的一個延遲問題。你可以給執行ajax的js外面加上:
setTimeout(function(){調用ajax的js方法體}, 1000);
這樣瀏覽器就會等待一秒,讓數據返回之後(前提是1秒之內數據能成功返回)再繼續執行下去。

閱讀全文

與js沒有按順序執行嗎相關的資料

熱點內容
微信如何發送ppt文件在哪裡設置 瀏覽:21
計算機網路與通信ppt 瀏覽:820
怎麼將多個文件轉換一個PDF 瀏覽:559
產品編程和模具編程哪個難學 瀏覽:357
抖音對口型都是用什麼唱歌app 瀏覽:471
js讓月和日顯示兩位 瀏覽:685
c語言大一程序設計例題 瀏覽:940
R1的圓弧用數控怎麼編程 瀏覽:259
brl格式的文件編輯器 瀏覽:91
安卓如何強制刪除敘述性文件 瀏覽:409
g83怎麼用增量編程 瀏覽:858
win8系統qq文件夾 瀏覽:41
什麼app有大量的撩妹句子 瀏覽:78
支持java的手機瀏覽器 瀏覽:914
劍三修改文件損壞 瀏覽:638
獲取指定文件的路徑嗎 瀏覽:370
ug裝好編程模塊無法用怎麼回事 瀏覽:10
java你畫我猜實驗報告 瀏覽:819
pdf多個文件列印 瀏覽:107
如何壓縮微信ppt文件 瀏覽:385

友情鏈接