JavaScript 提升
在本教程中,您将了解 JavaScript 的提升行为。
什么是提升
在 JavaScript 中,所有 variable 和 function 声明都被移动或提升 到它们当前范围的顶部,不管它是在哪里定义的。 这是 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