2017-10-12 106 views
0

這篇文章是怎麼樣的這個帖子的簡化版本:JavaScript for'循環中的執行順序是什麼?

What is the exact order of execution of Javascript's for loop?

我在爲什麼與循環工作時我總是感到困惑超級感興趣。我想知道如何在引擎蓋下執行for循環。

for (let i = 0; i < 10; i++) { 
    alert(i); 
}; 
從我的理解

所以,這是據我得到的理解在其中執行這樣的命令:)發動機初始化i = 0

2)

1發動機檢查這i < 10

3)發動機彈出持有for語句

圓括號4)引擎執行)循環本次迭代

5)發動機彈回到括號遞增i內的代碼,

6重複從步驟2.

我想我對第3步最困惑。引擎是否實際彈出'for'循環來執行塊內的代碼?

從我的理解來看,JavaScript是單線程的,只能同步運行,所以我對'for'語句中間的一些問題感到困惑,引擎可以保持'for'在執行塊中的代碼時在內存中執行... 除非'for'循環中的三個條件中的每一個都是它們自己的獨立命令,可以在繼續執行塊中的命令之前執行和完成這些命令。

我甚至不確定如果我正確地問這個問題,我還是比較新的編程,我只知道香草JS在這一點上...下個月是當我進入節點;)

想通了: Click for an image of my breakpoint placement

我已經瞭解到,順序是這樣的: 1)var i被初始化爲0

2)var i被檢查truthy

3)如果執行真實的,代碼,

4)一旦執行結束,i遞增

5)遞增一,i被檢查truthy

6)重複步驟3 - 5直到i是虛假的

7)迭代完成。

謝謝大家。 Chrome調試器比我想象的要強大得多!

+0

除了括號中的_pops而是正在轉到下一行_什麼是您的問題? – Lixus

+1

我不知道你是什麼意思的「彈出」。括號只與代碼的語法結構相關,與實際執行的內容無關。 「*'for'循環中的三個條件中的每一個都是它們自己的獨立命令,它們可以被執行*」正好相反。 – Bergi

+0

在這種情況下'i'的範圍在大括號內。順便說一句,如果你使用舊的'var'關鍵字,那麼'i'在周圍的函數或窗口的範圍內,如果'for'循環周圍沒有函數 –

回答

0

(對不起沒有足夠的代表把這個在評論)

我會建議使用瀏覽器的調試功能。我不知道你使用的是什麼瀏覽器,但只是谷歌「用X瀏覽器調試JS」,並且有很多教程。

首先,創建一個簡單的for循環htm文件。然後打開瀏覽器並初始化調試器。然後在瀏覽器中打開文件。打開「Sources」部分,你的代碼將被視爲可見的。點擊帶for循環的行並設置一箇中斷點,並在變量上創建監視(如i)。

然後重新加載htm文件,調試器將停止在斷點上。然後「逐步進入」for循環。您將能夠觀察系統如何在代碼中查看每一步,您可以觀察變量的變化,並希望這會讓您對它的工作方式有所瞭解。

這是瞭解任何複雜代碼的好方法,並且可以輕鬆調試錯誤。

+0

這個!這正是我需要的。我在for循環的每一步都有斷點。我已經瞭解到,首先,計數器變量被初始化,並且它基本上變成了檢查真理,執行代碼,遞增,檢查真值,執行代碼,遞增等的三角形。謝謝您的建議! – matthewvolk

+0

@matthewvolk以及我很高興我能幫上忙。我發現它非常有用,尤其是在嵌套for語句和多個IF子句的情況下。它有助於停止每一步,看看發生了什麼。 – esion