面试题答案
一键面试- 对于第一段代码:
- 函数提升行为:在JavaScript中,函数声明会被提升到其所在作用域的顶部。这意味着在代码执行之前,函数
func
已经被声明和定义好了,即使它的定义写在console.log(func());
之后。 - 输出结果:42。因为函数
func
被提升,console.log(func());
调用的是定义为返回42的函数func
。
- 函数提升行为:在JavaScript中,函数声明会被提升到其所在作用域的顶部。这意味着在代码执行之前,函数
- 对于第二段代码:
- 函数提升行为:这里使用的是
let
声明变量func
,let
有块级作用域且不存在变量提升(虽然有暂时性死区,但这里不涉及块级作用域问题)。console.log(func());
执行时,func
变量已经在作用域中存在,但还未初始化(因为let
声明的变量不会被提升到作用域顶部并初始化)。 - 输出结果:会报错
ReferenceError: func is not defined
。因为在执行console.log(func());
时,func
变量还未初始化,尽管它在后面被赋值为一个函数。
- 函数提升行为:这里使用的是