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

来源:3-12 let 和 const 的应用

WYW265672

2022-11-10 14:09:20

      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回答

imooc_慕慕

2022-11-10

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

祝学习愉快~

0
hmooc_慕慕
回复
hYW265672
hp>同学你好,

1、立即执行函数自上而下执行代码的时候,才会执行,预解析阶段是不执行的。

2、因为大部分高版本浏览器已经开始支持es6语法规则了,所以这里的if判断按照会当成块级作用域,在es6语法中,如果在块级作用域中声明的函数,会有以下情况:

(1)函数声明类似于var,即会提升到全局作用域或函数作用域的头部。所以这里声明的两个函数,在全局下会预解析,只不过与声明变量类似,相当于声明了变量没有赋值,所以输出为undefined。

(2)同时,函数声明还会提升到所在的块级作用域的最前,所以在if中是可以输出函数的。

祝学习愉快~

h022-11-10
共5条回复

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程