最新的Web开发教程
 

JavaScript Hoisting


Hoisting是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的初始化未悬挂

JavaScript的只吊声明,没有初始化。

实施例1 没有给出相同的结果与实施例2:

例1

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

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是在最后一个例子未定义?

这是因为只有声明(变量y)时,不初始化(= 7)被提升到上方。

由于hoisting ,Y已申报在使用之前,但因为初始化没有悬挂,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 ,计划可能包含的bug(错误)。

为了避免错误,总是在每一个范围的开头声明所有变量。

由于这是JavaScript的如何解释的代码,它始终是一个很好的规则。

JavaScript的严格模式不允许,如果他们不声明中使用的变量。
学习"use strict"下一章。