老师帮看一下这个程序,为什么37行那里g变成undefined了

老师帮看一下这个程序,为什么37行那里g变成undefined了

      f = function () {
        return true;
      };
      g = function () {
        return false;
      };
      console.log(typeof g, g);
      (function () {
        console.log(typeof g, g);
        if (1 && [] == ![]) {
          f = function f() {
            return false;
          };
          console.log(typeof g, g);
          function g() {
            return true;
          }
        }
      })();
      console.log(f());

图片描述1
图片描述

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imooc_慕慕 2022-11-10 15:00:07

同学你好,因为在自执行函数中,if之前function g提前声明了,但没有赋值,所以为undefined。

祝学习愉快~

  • 提问者 WYW265672 #1
    老师这里哪里提前声明的g啊,不明白
    2022-11-10 15:09:03
  • 提问者 WYW265672 #2
    老师这里哪里提前声明的g啊,不明白
    2022-11-10 15:09:08
  • imooc_慕慕 回复 提问者 WYW265672 #3

    同学你好,这里是最上面的g会在预解析的时候先提升g而后面的赋值部分不会提升,当执行到立即执行函数的时候,此时g只是一个变量,没有赋值,也就是等号后面的内容。

    https://img1.sycdn.imooc.com//climg/636ca75409afde1610290638.jpg

    可以回顾一下之前的内容:

    https://class.imooc.com/lesson/2122#mid=50418

    祝学习愉快~

    2022-11-10 15:25:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师