JavaScript中的声明提升(Hoisting)。

Hoisting(提升) 这个词是用来解释 变量 和 函数声明 是如何被提升到 函数或全局 作用域顶部的。

  • JS中的提升有变量提升函数声明提升
var a = 1;
console.log( a + '+' + b);
var b = 2;

//上面这个代码和下面的代码相同

var a = 1;
var b;//只是声明提升,而不是初始化也跟着提升。
console.log( a + '+' + b);
b = 2;
f();
function f(){
    console.log(a);
    var a = 1;
}

//上面这个代码和下面的代码相同

function f(){
    var a;
    console.log(a);//undefined
    a = 1;
}
f();
//函数声明会被提升,但是函数表达式却不会被提升。
// Uncaught TypeError: f is not a function
f();
var f = function (){
    console.log(a); 
    var a = 2;
}
//函数声明的优先级要大于变量声明。

SCDN上的一个有趣的例子:

alert(a);       // ??
a();            // ??
var a = 3;
function a(){
    alert(10);
}
alert(a)        // ??
a = 6;
a();            // ??

//按照函数和变量声明提升后应该是这种顺序:

function a(){ //先进行函数声明提升
    alert(10);
}
alert(a);     // =alert(10)
a();          //10;
var a;        //再进行变量声明提升;
a = 3;
alert(a);     //3;
a = 6;
a();          // a is not a function.
//即a这个时候已经是一个变量了,而不是一个函数。不能调用了。

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

js学习笔记-对象 上一篇
js学习笔记-事件 下一篇