慕标5832272
问题很好,题主看起来也有过思考。这个问题涉及两个点,变量提升和函数声明。1.变量提升js中的变量提升,提的是声明。因此变量a只有声明被提升了,初始化依然处于原位置。而函数a则整体都提升了。2.函数声明对于function a(){},实际上分成了两部分,一是声明一个name为a的函数,二是将这个函数赋给变量a。因此这段代码的运行过程是这样的1.声明函数a,根据上文,实际是var a = function (){}(函数名为a)。这里已经声明了变量a并初始化2.声明变量a,由于之前已经声明了a,因此这里会跳过声明。相当于变量a的变量提升没用了。3.执行变量a的初始化,由于之前的声明,这里实际上等同于变量a的赋值因此最后打印的a为8