函数声明和变量声明存在优先级吗? January 7, 2020 上几张图:  第一个: 声明了变量a,当预解析时,它的值为undefined,再声明了函数a,然后输出一下,发现a 输出为整个函数, 所以暂且认为函数声明会高级一点,  声明了a变量和a函数,弹出a的值为4,但是,调用时却为not a function,当你输出a的时候,他才赋值为4,覆盖了函数a,是声明顺序不同吗?变量声明优先级高于函数声明?  再看这个,换了个顺序,还是一样的,说明如果a变量赋值了话就会覆盖函数声明。  看看看,你不赋值他就很正常,所以就是因为赋值了,所以覆盖了函数a,  看看,一赋值就有问题,在此证明,赋的值会覆盖a函数  把输出放前面。预解析时,a是undefined,函数a为也保存了整个函数,那么为啥在前面输出为function,后面输出的a=7;  这个其实和前面的某一个一样,没什么问题  看了这些,我们应该分析一下了,js解释器进行解释的时候,会先预解析,分析一下最后一个, 预解析: ```javascript a:undefined 不执行 不执行 a:function(){ return 9} ``` 当代码开始执行的时候: ```javascript a未赋值,还是undefined, alert(a) 函数声明优先级高于变量声明的优先级。 alert(a());调用a函数, ``` 可是为什么赋值了的变量却会覆盖函数呢? 有个博主说:同一个标识符的情况下,变量声明与函数声明都会提升;函数声明会覆盖变量声明,但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值那么变量优先级高于函数。 嘻嘻嘻~所以这句话解决了所有问题。