js并不是真正从上到下依次执行的,js在执行这些代码之前首先要进行一个预解析,它先去找所以的定义,变量的定义函数的声明,并且把变量的定义函数的声明进行提升,提升到这个作用域的最顶层。当执行到函数内部的时候,在执行函数内部的预解析,执行完预解析后再去执行代码,代码是一行一行的执行的。
变量和函数同名的情况下,
var a = 1; var a = function(){} //函数表达式声明函数 console.log(a) //结果 //function(){} var a = function(){} //函数表达式声明函数 var a= 1; console.log(a) //结果 //1 var a= 1; function a(){}; console.log(a); //1 function a(){}; var a=1; console.log(a); //1