JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程:
把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
先提升var,在提升function
如果变量和函数同名的话,函数优先
console.log(a);//函数a的代码
function a(){
console.log('aaaaa');}
var a = 1;
console.log(a)//1
预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)
<script>
function f1(){
console.log("哈哈");}
</script>
<script>
f1();
function f1(){
console.log("嘎嘎");}
</script>
f1();//-----报错
var f1=function (){
console.log(a);
var a=10;};f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错
function f1(){
var a = b = c = 9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}