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协议 。转载请注明出处!