上一章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严格模式中不允许使用未声明的变量。参见下一章以了解更多关于严格模式的信息。
推荐阅读
- JS闭包和闭包函数 – JavaScript高级教程
- JS借用调用方法 – JavaScript高级教程
- JS事件传播机制 – JavaScript高级教程
- JS事件监听器 – JavaScript高级教程
- JS类型转换 – JavaScript高级教程
- JS数学操作 – JavaScript高级教程
- JS日期和时间 – JavaScript高级教程
- JS定时器timer – JavaScript教程
- JS创建对话框 – JavaScript教程