var a = 1; function a() { console.log(3); } console.log(a); // 1 a(); // 报错
var a; function a() { console.log(2); } console.log(a); // 打印函数体 a(); // 2
一:
预解析时,函数声明创建的函数整体会提升到所在执行环境【作用域】的顶部,
函数表达式创建的函数,仅仅提升变量名到所在执行环境【作用域】的顶部。
二:
当函数声明和变量声明同时存在时,函数声明的优先级更高;
当变量声明但没有赋值并且函数名和变量名一致时,此名称仍指向函数;
当变量名赋值且函数名和变量名一致,此名称指向变量,函数被取代,