知识点:不影响编程,js的原理,了解,解释,之前解释不了的bug
变量声明提升:所有通过var声明的变量,都会将声明的过程提升到当前作用域的开始位置,在原来赋值的位置赋值
console.log(a);
var a = 10;
console.log(a);
console.log(a); //报错
function fn(){
console.log(a); //undefined
var a = 10;
}
fn()
函数声明提升:既提前声明有提前赋值,整体提升到当前作用域开始的位置
fn();
function fn(){
console.log("hello");
}
赋值式创建函数:提升的是变量的声明,函数并没有提升
console.log(fn)
var fn = function(){
console.log("hello");
}
当变量名和函数名重复了:变量名提升的更高,后生效的是函数
生效的是函数
console.log(a); //函数
function a(){
console.log("hello");
}
var a = 10;
console.log(a); //10
function fn(){
console.log(a); //f2
var a = "hello";
function a(){1};
console.log(a); //"hello"
a = "world";
function a(){2}
console.log(a) //"world"
}
fn();
// ↑↑↑等价于↓↓↓
function fn(){
var a;
function a(){1};
function a(){2};
console.log(a); //f2
a = "hello";
console.log(a); //"hello"
a = "world";
console.log(a) //"world"
}
fn();