函數宣告與表達式:揭開JavaScript 中早期函數存取的奧秘
儘管其外觀直觀,但使用函數的能力在在JavaScript 中的定義之前,它長期以來一直讓開發人員感到困惑。考慮以下程式碼:
<code class="javascript">function fooCheck() { alert(internalFoo()); // Using internalFoo() before its definition return internalFoo(); // Still using it, despite its undefined status function internalFoo() { return true; } // Finally, the definition arrives } fooCheck();</code>
奇怪的是,這段程式碼在所有主流瀏覽器中執行時都沒有錯誤。為了解開這個謎團,我們轉向函數宣告和表達式的概念。
函數宣告:提升的秘密
JavaScript 中的 ключевое слово 「函數」建立一個函數宣言。與作為賦值的函數表達式不同,函數聲明表現出一個獨特的特徵:提升。
提升是一種語法技巧,它將函數標識符提升到其範圍內的所有其他語句之上,從而允許在其實際引用之前對其進行引用定義。在我們的範例中,標識符「internalFoo」被提升,使其可以在「fooCheck」函數內的任何點使用。
早期函數存取:提升的後果
提早造訪「internalFoo」是提升的直接結果。解釋器遇到函數宣告並為標識符“internalFoo”分配一個佔位符,以便隨後引用它。只有當解釋器到達函數體時,它才會執行定義,並建立實際的函數。
函數表達式:應用不同的規則
與函數宣告相比,函數表達式遵循正常的自頂向下執行。它們在遇到時進行評估,並且它們的標識符不會被提升。這意味著在定義之前嘗試存取函數表達式將導致錯誤。
ECMAScript 標準中的說明
函數聲明的行為是明確定義的在 ECMAScript 標準(第 10.1.3 節)。它指出函數聲明在執行任何程式碼區塊內容之前綁定,無論函數在程式碼中的位置如何。
以上是JavaScript 如何允許在定義之前使用函數?解釋了提升的奧秘。的詳細內容。更多資訊請關注PHP中文網其他相關文章!