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

BFE.devAI解答 - JavaScript 小测验
28. Hoisting II

输出:

1
2
TypeError: func3 is not a function

解释:

  • func1() 输出 1,因为 func1 是一个箭头函数,它会在定义时绑定 this,并且没有创建自己的 arguments 对象。它也是函数表达式,因此只有在定义后才能调用。在这个特定的例子中,它被定义,并立即被调用了。
  • func2() 输出 2,因为 func2 是一个函数声明,函数声明具有函数提升的特性,可以在声明之前访问。因此,在调用 func2() 之前定义 func2() 会在代码运行时提升到文件/函数的顶部。
  • func3() 抛出 TypeError,因为 func3 是一个变量声明,但它还没有被赋值。这意味着在使用它之前,它的值为 undefined,它不是函数,因此不能被调用。
  • var func3 = function func4() {console.log(3)} 声明了一个名为 func3 的变量,将其赋值为一个具名函数表达式 func4。但是,在该行代码执行之前,func3 的值为 undefined,因此之前尝试调用 func3() 时出现了 TypeError。如果将 var func3 移动到 func4 的声明之后,则 func3() 也将输出 3