JavaScript 提升

在本教程中,你將瞭解 JavaScript 的提升行為。

什麼是變數提升

在 JavaScript 中,所有變數函式宣告都被移動或提升到其當前作用域的頂部,無論它在何處定義。這是 JavaScript 直譯器的預設行為,稱為變數提升。在接下來的部分中,我們將詳細介紹它的實際工作原理。

函式提升

使用函式宣告定義的函式將自動提升。這意味著它們可以在定義之前被呼叫。讓我們通過一個例子理解這一點:

// Calling function before declaration
sayHello(); // Outputs: Hello, I'm hoisted!

function sayHello() {
    alert("Hello, I'm hoisted!");
}

正如你所看到的,我們在定義 sayHello() 函式之前呼叫了此函式,但程式碼仍然有效。這是因為函式宣告在後面自動提升到頂部。

變數提升

同樣,變數宣告也會自動提升到當前作用域的頂部。這意味著如果變數在函式塊內宣告,它將被移動到函式的頂部,但如果它在任何函式之外宣告,它將被移動到指令碼的頂部並變為全域性可用。看一下下面的例子,看看它是如何工作的:

str = "Hello World!";
alert(str); // Outputs: Hello World!
var str;

但是,JavaScript 僅提升宣告,而不是初始化。這意味著如果在使用變數後宣告並初始化變數,則該值將為 undefined 。例如:

alert(str); // Outputs: undefined
var str;
str = "Hello World!";

這是演示 JavaScript 的可變提升行為的另一個示例:

var i = 1; // Declare and initialize i
alert(i + ", " + j); // Outputs: 1, undefined
var j = 2; // Declare and initialize j

var x = 5; // Declare and initialize x
var y; // Declare y
alert(x + ", " + y); // Outputs: 5, undefined
y = 10; // Initialize y

var a = 3; // Declare and initialize a
b = 6; // Initialize b
alert(a + ", " + b); // Outputs: 3, 6
var b; // Declare b

var u = 4; // Declare and initialize u
alert(u + ", " + v); // Outputs: 4, undefined
var v; // Declare v
v = 8; // Initialize v

可變提升看起來有點令人困惑,但如果仔細閱讀這些例子,你將很容易理解它是如何工作的。

注意: 由於提升行為,最好將變數宣告在當前作用域的頂部。此外,在 JavaScript 嚴格模式下不允許使用不宣告的變數。請參閱下一章以瞭解有關嚴格模式的更多資訊。