预编译GO的执行顺序 和 那个函数提升在变量提升之前的结论 感觉是互相违背的

    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是一个变量。