JavaScript 提升
提升是 JavaScript 将声明移到顶部的默认行为。
提升是 JavaScript 将声明移到顶部的默认行为。
JavaScript 声明被提升
在 JavaScript 中,变量可以在使用后声明。换句话说:变量可以在声明之前使用。
下面两个示例的效果一样。
变量在声明之前使用:
x = 5; // x 赋值为 5
elem = document.getElementById("demo"); // 查找一个元素
elem.innerHTML = x; // // 在元素中显示 x
var x; // 声明 x 变量
先声明再使用变量:
var x; // 声明 x 变量
x = 5; // x 赋值为 5
elem = document.getElementById("demo"); // 查找一个元素
elem.innerHTML = x; // 在元素中显示 x
要理解这一点,需要了解“提升”一词。提升是 JavaScript 的默认行为,将所有声明移动到当前作用域的顶部(移动到当前脚本或当前函数的顶部)。
let 和 const
用 let
和 const
定义的变量不能在声明之前使用。
声明之前 let
变量将导致 ReferenceError
:
carName = "Volvo";
let carName;
在声明之前使用 const
变量是语法错误:
carName = "Volvo";
const carName;
可在 JavaScript let 章节和 JavaScript const 章节了解有关 let 和 const 的更多信息。
未提升 JavaScript 初始化
JavaScript 只提升声明,而不是初始化。
下面示例 1 和 示例 2 的结果并不相同。
示例 1:
var x = 5; // 初始化 x
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
示例 2:
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; /// 显示 x 和 y
var y = 7; // 初始化 y
为什么会出现这样的差异?这是因为只有声明 (var y
) 被提升到顶部,初始化 (= 7
) 不会被提升。
下面的示例相当于示例 2 提升后的代码:
var x = 5; // 初始化 x
var y; // 声明 y
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
y = 7; // 给 y 赋值 7
在顶部声明您的变量!
对许多开发人员而言,JavaScript 提升是一种未知或被忽视的行为。如果开发人员不了解提升,则程序可能包含错误(错误)。
为避免错误,请始终在每个作用域的开头声明所有变量。
JavaScript 是一种解释性的语言,坚持在使用变量前声明变量是一个很好的习惯。
严格模式下的 JavaScript 不允许使用未声明的变量。在下一章学习使用 JavaScript 严格模式。