JAVASCRIPT 基础教程
JAVASCRIPT & DOM
JAVASCRIPT & BOM
JAVASCRIPT 高级教程
JAVASCRIPT 示例
JAVASCRIPT 参考

JavaScript 提升

在本教程中,您将了解 JavaScript 的提升行为。

什么是提升

在 JavaScript 中,所有 variablefunction 声明都被移动或提升 到它们当前范围的顶部,不管它是在哪里定义的。 这是 JavaScript 解释器的默认行为,称为 hoisting。 在接下来的部分中,我们将仔细研究它的实际工作原理。

函数提升

使用函数声明定义的函数会自动提升。 这意味着它们可以在定义之前被调用。 让我们通过一个例子来理解这一点:

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

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

如您所见,我们在定义之前调用了 sayHello() 函数,但代码仍然有效。 这是因为函数声明在幕后自动提升到顶部。


变量提升

同样,变量声明也会自动提升到其当前范围的顶部。 这意味着如果变量在函数块内声明,它将被移动到函数的顶部,但如果它被声明在任何函数之外,它将被移动到脚本的顶部并成为全局可用的。 看看下面的例子,看看它是如何工作的:

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

然而,JavaScript 只提升声明,而不是初始化。 这意味着如果一个变量在使用它之后被声明和初始化,那么它的值将是undefined。 例如:

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

这是另一个演示 JavaScript 的变量提升行为的示例:

var i = 1; // 声明并初始化 i
alert(i + ", " + j); // 输出: 1, undefined
var j = 2; // 声明并初始化 j

var x = 5; // 声明并初始化 x
var y; // 声明 y
alert(x + ", " + y); // 输出: 5, undefined
y = 10; // 初始化 y

var a = 3; // 声明并初始化 a
b = 6; // 初始化 b
alert(a + ", " + b); // 输出: 3, 6
var b; // 声明 b

var u = 4; // 声明并初始化 u
alert(u + ", " + v); // 输出: 4, undefined
var v; // 声明 v
v = 8; // 初始化 v

变量提升乍一看可能有点令人困惑,但如果您仔细阅读这些示例,您将很容易理解它是如何工作的。

注意: 由于提升行为,在当前范围的顶部声明变量被认为是最佳实践。 此外,在 JavaScript 严格模式 中不允许使用不声明的变量。 请参阅下一章以了解有关严格模式的更多信息。

Advertisements