二维码

JavaScript 吊装

JavaScript 吊装


提升是 JavaScript 的默认行为,即将声明移动到 返回页首。


JavaScript 声明被吊起

在 JavaScript 中,变量可以在使用后声明。

换句话说;变量可以在声明之前使用。

示例1 给出的结果与示例 2 相同:

1
1
2
3
4
5
6
x = 5; // Assign 5 to x  

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;                     // Display x in the element

var x; // Declare x

2
1
2
3
4
5
var x; // Declare x  
x = 5; // Assign 5 to x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;                     // Display x in the element

要理解这一点,您必须了解“吊装”一词。

提升是 JavaScript 的默认行为,将所有声明移动到 当前作用域的顶部(到当前脚本或当前函数的顶部)。


let 和 const 关键字

letconst提升到顶部的变量 ,但未初始化

含义:代码块知道 变量,但在声明之前不能使用它。

在声明变量之前使用let变量将导致ReferenceError.

变量从一开始就处于“时间死区” 的块,直到它被声明:

:这将导致ReferenceError
1
2
carName = "Volvo";  
let carName;

在声明变量之前使用const变量是一个语法错误, 因此,代码将根本无法运行。

:此代码将不会运行
1
2
carName = "Volvo";  
const carName;

在 [JS Let / Const] 中阅读有关 let 和 const 的更多信息。


JavaScript 初始化未被吊起

JavaScript 只吊起声明,而不吊起初始化。

示例 1 给出的结果与示例 2 不同:

1-->
1
2
3
4
5
var x = 5; // Initialize x  
var y = 7; // Initialize y

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

2-->
1
2
3
4
5
6
var x = 5; // Initialize x  

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

var y = 7; // Initialize y

在最后一个示例中 y 未定义有意义吗?

这是因为只有声明 (var y) 而不是初始化 (=7) 被提升到顶部。

因为吊装,y在使用之前就已经声明了,但是因为初始化不会被提升,y 的值是未定义的。

示例 2 与编写相同:

-->
1
2
3
4
5
6
7
var x = 5; // Initialize x  
var y;     // Declare y

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

y = 7;    // Assign 7 to y


在顶部声明您的变量!

吊装(对许多开发人员来说)是一种未知或被忽视的行为 JavaScript的。

如果开发人员不了解吊装,程序可能包含错误(错误)。

为避免错误,请始终在 每个范围。

由于这是 JavaScript 解释 代码,这总是一个好规则。

严格模式下的 JavaScript 不允许使用变量,如果它们是 未申报。
在下一章中学习使用严格