JS函数提升和变量提升 – JavaScript高级教程

上一章JavaScript教程请查看:JS借用调用方法
在本教程中,我们将了解JavaScript的提升行为。
什么是提升?在JavaScript中,所有变量和函数声明都被移动或提升到当前作用域的顶部,而不管它是在哪里定义的。这是JavaScript解释器的默认行为,称为提升。在接下来的小节中,我们将进一步了解它是如何工作的。
函数提升使用函数声明定义的函数将自动提升,这意味着可以在定义它们之前调用它们。让我们用一个例子来理解这一点:

// 在声明之前调用函数 sayHello(); // : Hello!function sayHello() { alert("Hello!"); }

正如你所看到的,我们已经叫sayHello()函数定义之前,但代码仍然有效,这是因为函数声明在后台被自动提升。
变量提升同样,变量声明也自动升起到他们当前的范围。这意味着,如果变量声明在一个功能块,它将移动顶部的功能,但如果是外声明的任何函数将搬到脚本的顶端,为全局可用。看看下面的例子,看看这是如何工作的:
str = "Hello World!"; alert(str); // : Hello World! var str;

但是,JavaScript只支持声明,而不支持初始化。这意味着如果在使用变量后声明并初始化它,那么该值将是未定义的。例如
alert(str); // : undefined var str; str = "Hello World!";

下面是演示JavaScript变量提升行为的另一个示例
var i = 1; // 声明和初始化 i alert(i + ", " + j); // 输出: 1, undefined var j = 2; // 声明和初始化 jvar x = 5; // 声明和初始化 x var y; // 声明 y alert(x + ", " + y); // 输出: 5, undefined y = 10; // 初始化 yvar a = 3; // 声明和初始化 a b = 6; // 初始化 b alert(a + ", " + b); // 输出: 3, 6 var b; // 声明 bvar u = 4; // 声明和初始化 u alert(u + ", " + v); // 输出: 4, undefined var v; // 声明 v v = 8; // 初始化 v

乍一看,可变提升可能有点令人困惑,但如果仔细研究这些示例,你将很容易理解它是如何工作的。
【JS函数提升和变量提升 – JavaScript高级教程】注意:由于提升行为,最好在当前范围的顶部声明变量。此外,在JavaScript严格模式中不允许使用未声明的变量。参见下一章以了解更多关于严格模式的信息。

    推荐阅读