console.log(a)
var a = 1;
function a() {}
console.log(a)
//预编译
// 生成GO对象
// 将变量声明的变量名当做GO对象的属性名, 值为undefinded
// 将声明函数的函数名当做GO对象的属性名, 值为函数体
//GO{
// a: undefined
// function a()
// 此处输出
// 1
// }
//================================================================
//函数提升优先级高于变量提升
// function a(){} // 函数声明提升 a-> f a (){}
// var a; // 变量提升
// console.log(a) // 此时变量a只是声明没有赋值所以不会覆盖函数a --> 输出函数a f a (){}
// a=1; //变量赋值
// console.log(a) // 此时变量a赋值了 --> 输出变量a的值 1
这个其实没毛病的,var go = {a:1} 这里的a并不是你function a() {}的a,他们并不是同一个东西,对象的属性你可以理解为一个字符串,是对象go的一个属性,而函数a是一个变量。