变量提升和函数提升:
就是将变量声明或者函数全部代码提升到当前作用域(全局作用域或函数作用域)最开始的部分。
JavaScript中函数域为最小域范围;for循环、while循环、if语句、switch语句的“{}”不是作用域。
一.变量提升:
使用var声明的变量,会提前到当前作用域的开始的位置,被声明。原位赋值。
1.所指的形式:var a = "提升";(必须有关键字“var”)
2.提升的方式:将“var a”,提升到当前作用域的顶部,a = "提升",在原型定义的位置。
3.具体代码:
eg:
1. console.log( a) ----> undefined
var a = 10;
console.log(a) ----> 10
2.console.log(a);
var a = "我是全局中的变量";
console.log(a);
function fn(){
console.log(interiorA);
var interiorA = "我是函数内的变量";
console.log(interiorA)
}
fn();
↓↓↓↓↓↓↓↓
变量提升执行顺序
var a ; //变量提升,此时只是声明,并没有赋值
console.log(a); // undefined
a = "我是全局中的变量" // 此时才赋值
console.log(a); //我是全局中的变量
function fn() {
var interiorA; //变量提升,函数作用域范围内
console.log(interiorA); //undefined
interiorA = "我是函数内的变量" //此时对局部变量进行赋值
console.log(interiorA) //我是函数内的变量
}
二.函数提升
1.函数提升所指的形式:function fn(){......}(必须是函数声明的形式,不能是函数表达式的形式)。
2.函数提升的方式:将“function fn(){......}”整个函数声明代码块提升到当前作用域的顶部,
原先位置以不存在该代码。
3.所有使用function声明的函数,都会整体提升,只要当前作用域内声明了数
在任何位置都可以使用,赋值式创建函数,提升的声明,不是。
当函数和变量重名,变量的提升更高,函数的提升在变量的下面,
导致值函数生效
var a;
function a(){}
console.log(a);
a = 10;
eg:
function fn(){
console.log(a);
var a = "hello";
console,log(a);
function a(){1}
console.log(a);
a = "world";
console.log(a);
function a(){2}
cosole.log(a)
}
上式提升后等同于下式
function fn(){
var a; 变量提升最高;
function a(){1}; 函数提升到变量下面;
function a(){2};
console.log(a); f2
a = "hello"
console.log(a); hello
console.log(a); hello
a = "world"
console.log(a) world
console.log(a) world
}