首頁 > web前端 > js教程 > JS 中的提升(參考錯誤!!)

JS 中的提升(參考錯誤!!)

Susan Sarandon
發布: 2024-12-31 02:27:10
原創
227 人瀏覽過

HOISTING IN JS (REFERENCE ERROR!!)

了解 JavaScript 中的提升

提升是 JavaScript 中最基本的概念之一,但它可能會讓初學者甚至經驗豐富的開發人員感到困惑。

在這篇部落格中,我們將揭開提升的神秘面紗,解釋它是如何運作的,並提供清晰的範例來幫助您充分理解這個概念。

什麼是提升?

提升是一種 JavaScript 機制,其中變數、函數和類別的宣告在編譯階段移動到其作用域的頂部

這意味著您可以在程式碼中實際聲明這些元素之前使用它們。

但是,對於 var、let、const、函數和類,提升的工作方式不同,這就是經常出現混亂的地方

提升工作原理

當 JavaScript 程式碼執行時,它會經歷兩個階段:

  1. 編譯階段:在此階段,引擎將聲明提升到其範圍的頂部。

  2. 執行階段:程式碼逐行運行,遵守提升規則。

不同聲明的提升規則

1。 var

用 var 宣告的變數會被提升,但它們的值不會被初始化。在初始化之前,它們被設定為未定義。

console.log(a); // Output: undefined
var a = 10;
console.log(a); // Output: 10
登入後複製
  1. let 和 const

使用 let 和 const 宣告的變數也會被提升,但仍保留在 臨時死區 (TDZ) 中。在程式碼中遇到它們的聲明之前,無法存取它們。

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 20;

登入後複製
console.log(c); // ReferenceError: Cannot access 'c' before initialization
const c = 30;
登入後複製
  1. 功能

函數宣告被完全提升,這意味著它們的名稱和主體都移到了頂部。這允許您在聲明函數之前調用它們。

greet(); // Output: "Hello, World!"

function greet() {
    console.log("Hello, World!");
}

登入後複製

但是,函數表達式的處理方式有所不同。它們的行為類似於使用 var、let 或 const 宣告的變數:

sayHi(); // ReferenceError: Cannot access 'sayHi' before initialization

const sayHi = function () {
    console.log("Hi!");
};
登入後複製
  1. 課程

類別被提升,但仍處於臨時死區,類似於 let 和 const。在聲明類別之前,您無法存取該類別。

const obj = new MyClass(); // ReferenceError: Cannot access 'MyClass' before initialization

class MyClass {
    constructor() {
        this.name = "Class";
    }
}
登入後複製

了解顳死區 (TDZ)

臨時死區是作用域開始和變數宣告點之間的時間段。在此期間,任何對let或const變數的存取都會拋出ReferenceError。

Key Takeaways

Declaration   Hoisted?       Behavior Before Initialization

var            Yes              undefined

let            Yes            ReferenceError (in TDZ)

const          Yes             ReferenceError (in TDZ)

Function Declaration  Yes       Fully hoisted, works before 
declaration

Function Expression  Partially (as var)   undefined or ReferenceError (if let/const)

Class           Yes              ReferenceError (in TDZ)
登入後複製

結論

理解提升對於編寫乾淨且可預測的 JavaScript 程式碼至關重要。雖然乍看之下似乎很神奇,但了解 var、let、const、函數和類別的規則將幫助您避免常見的陷阱。始終在其作用域的頂部聲明變數和函數,以確保清晰度並減少出錯的可能性。

編碼愉快!

以上是JS 中的提升(參考錯誤!!)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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