js引擎运行JS分为两步:预解析+代码执行
- 预解析: JS引擎会把js里面所以var还有function提升到函数最前面,称为变量提升与函数提升(变量提升优先与函数提升) 函数提升(只整体提升,不调用)
fn()//函数整体会提升到最前面,所以不报错
function fn(){
console.log(666)
}
变量提升(只提前声明,不赋值)
console.log(a)//只提前声明了a没有赋值所以undefined
var a = 20
console.log(a)//代码执行后赋值了20
- 同名提升
- 变量同名
var a=22
var a=33
console.log(a)
/* 代码是这样的
var a;
var a;
a=22;
a=33;//33把22覆盖了
console.log(a)
*/
2. 函数同名
function fn() {
console.log(111)
}
function fn() {
console.log(2222)
}
/* 后面这个同名函数把前面函数覆盖了,所以fn指的是function fn () {
console.log(2222)
} */
fn()