以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 小测验
42. Hoisting V

输出为:

2
3
Uncaught ReferenceError: fn3 is not defined

解释:

  • 在第一个立即执行的函数表达式中,如果 fn 不存在,则定义 fn 函数并调用。因为函数声明比变量声明优先级高,所以定义的 fn 函数会把在全局范围内定义的同名函数给覆盖掉,所以输出为 2
  • 在全局作用域中定义了函数 fn,输出为 1
  • 在第二个立即执行的函数表达式中,如果 fn1 不存在,则定义 fn1 函数并调用。但是与第一个立即执行函数的情况不同,这里的 fn1 是在全局中定义的,所以不会被覆盖,输出为 3
  • 在第三个立即执行的函数表达式中,条件语句中的判断为 false,所以内部定义的 fn3 函数不会被调用。在调用 fn3() 时会抛出 ReferenceError