个性化阅读
专注于IT技术分析

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; // 声明和初始化 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严格模式中不允许使用未声明的变量。参见下一章以了解更多关于严格模式的信息。

赞(0)
未经允许不得转载:srcmini » JS函数提升和变量提升 – JavaScript高级教程

评论 抢沙发

评论前必须登录!