不爱学习的js 2022-04-22 16:40 采纳率: 25%
浏览 10

预编译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
  • 写回答

1条回答 默认 最新

  • _念_ 2022-04-22 16:59
    关注

    这个其实没毛病的,var go = {a:1} 这里的a并不是你function a() {}的a,他们并不是同一个东西,对象的属性你可以理解为一个字符串,是对象go的一个属性,而函数a是一个变量。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月22日