Javascript 函數作用域與提升:揭開隱藏的機制
您偶然發現了一個涉及JavaScript 作用域和提升的令人困惑的範例。讓我們更深入地研究這些概念,以獲得更清晰的理解。
函數提升
提升將函數宣告提升到其包含範圍的頂端。在您的範例中:
function b() { a = 10; return; function a() {} }
解釋器如下重新排列此程式碼:
function b() { function a() {} a = 10; return; }
這表示內部函數a() 聲明實際上放置在b()的開頭函數,即使它稍後出現在程式碼中。
變數作用域
在 JavaScript 中,變數的作用域可以是全域的,也可以是本地的。全域變數可以從程式中的任何位置訪問,而局部變數則被限制在其定義函數的範圍內。
函數宣告的奇怪情況
在你的程式碼中, b() 中的內部函數a() 宣告被解釋為立即函數呼叫:
var a = function () {};
這有效地創建了一個局部變數a在b() 函數中,它隱藏了全域a 變數。
將它們放在一起
結合提升和變數作用域的概念,您可以視覺化執行順序如下:
以上是JavaScript 函數提升和作用域如何影響變數賦值和檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!