什么是函数提升?

提升是JavaScript的一种机制,在代码执行之前,所有的变量和函数声明会被移动到它们定义域的最前端。 一般,JavaScript解释器会向前查找全部变量的声明,并且将它们提升到函数的顶部。注意到在JavaScritp里初始化和赋值没有被提升,只有声明被提升。这帮助我们明白JavaScript域的工作方式,有利于建立稳固的基础。

在JavaScript里有两种方法建立函数,一个是函数声明,一个是函数表达式。下面看看具体情况,提升是如何发生影响的。

考虑下面的例子:

callEralier();
function callEralier(){
document.write("Call me...");
}

获得输出"Call me...".

这里的函数callEralier()在声明以前被调用。意味着JavaScript 提升了这个函数。

但是,仅有声明被提升了。

考虑下面的例子:

callEralier();
tempCall();
var tempCall = function callEralier() {
document.write("Call me...");
};

如上面我们看到的,变量tempCall被提升了,但是它的赋值没有被提升。这样,解释器会抛出一个错误TypeError,因为它将这个表达式看成一个变量而不是一个函数。这就是JavaScript如何提升变量和函数的声明。

原文链接