猿型链 2022-05-10 19:54 采纳率: 0%
浏览 25

函数提升的优先级比变量提升优先级更高,同名的函数和变量怎么提升呢?

函数提升的优先级比变量提升优先级更高,同名的函数和变量怎么提升呢?预编译里 先声明变量,再声明函数,这个不是和前面的 (函数提升的优先级比变量提升优先级更高)冲突了吗?

   var d =  function d(){
      console.log(this)
      console.log(d)   // f d()
      d = 8
      console.log(d)  // f d()
    }
    d()

运行结果及报错内容

打印结果都是 都是 函数 d()

我想要达到的结果

是否冲突呢?具体的运行机制怎样的呢?

  • 写回答

1条回答 默认 最新

  • RoddyLD 2022-05-13 17:38
    关注

    全局预编译
    1.创建一个GO对象 Global Object
    2.将var关键字声明的变量当作GO对象的属性,赋值为undefined,有重名的直接覆盖
    3.将function关键字声明函数 当作GO对象的属性,值为函数体,重名直接覆盖

    函数预编译
    1.创建一个AO对象 Activation Object 执行期上下文对象
    2.函数的形参,成为AO对象的属性,值为实参的值,若未传值,值为undefined
    3.将var关键字声明的变量,成为AO对象的属性,值为undefined,遇到已经存在的,不做任何变化
    4.将function声明的函数 成为AO对象的属性 值为函数体,重名直接覆盖

    你代码中d=8并没有使用var关键字,所有不会有变量提升,所以两次打印都是d该函数

    评论

报告相同问题?

问题事件

  • 创建了问题 5月10日

悬赏问题

  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)
  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存