首頁 > web前端 > js教程 > JavaScript 函數提升和作用域如何影響變數賦值和檢索?

JavaScript 函數提升和作用域如何影響變數賦值和檢索?

Barbara Streisand
發布: 2024-12-17 17:08:13
原創
359 人瀏覽過

How Does JavaScript Function Hoisting and Scoping Affect Variable Assignment and Retrieval?

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 變數。

將它們放在一起

結合提升和變數作用域的概念,您可以視覺化執行順序如下:

  • 函數b () 聲明被提升到全域的頂部範圍。
  • var a = 1 語句定義全域 a 變數。
  • 內部函數a() 宣告也被提升到b() 函數中,其行為類似於var a = function ( ) {};.
  • a = 10 語句在b()中重新分配局部a 變數。
  • 當您呼叫alert(a),傳回全域a變量,該變數沒有被修改,保持原來的值1。

以上是JavaScript 函數提升和作用域如何影響變數賦值和檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板