JavaScript代码提升



代码提升是JavaScript将声明移动到顶部的默认行为。


JavaScript的声明都代码提升

在JavaScript中,一个变量可以在它被使用后再声明.

换句话说,变量可以在它被声明之前使用.

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

示例1:

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:

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

让我试试

要理解这一点,你必须理解“hoisting”这个术语

Hoisting JavaScript的默认行为是移动到当前范围内的所有声明的顶部 (到当前脚本或当前函数的顶部).


JavaScript初始化不是hoisting

JavaScript只hoisting声明,初始化不是.

示例1和示例2的结果不一样:

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

让我试试

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)被吊到顶部.

由于Hoisting,y在声明之前一直在使用,但因为初始化不Hoisting,y的值是未定义的.

示例2同样这样写:

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

让我试试


在顶部声明变量 !

Hoisting 是(许多开发者)未知的或忽视的JavaScript行为.

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

为了避免错误,总是在每个作用域的开始声明所有变量.

这是如何解释的JavaScript代码,这是一个很好的规则.

严格模式JavaScript如果他们没有声明,是不允许使用的, 学习 "use strict" 在下一章.