Skip to content

描述下列代码的执行结果

Posted on:2024年7月19日 at 08:27
foo(typeof a);
function foo(p) {
  console.log(this);
  console.log(p);
  console.log(typeof b);
  let b = 0;
}

在这段代码中,我们首先遇到了一个函数声明 foo,然后在 foo 函数内部,有三个语句:

  1. console.log(this);: 打印函数 foo 的执行上下文中的 this 值。由于 foo 是在全局环境中声明的,因此 this 指向全局对象(在浏览器环境下通常是 window 对象)。
  2. console.log(p);: 打印参数 p 的类型。这个参数的值是在调用 foo 函数时传入的,因此这里会输出传入的参数类型。
  3. console.log(typeof b);: 打印变量 b 的类型。由于变量 b 是在后面的代码中使用 let 声明的,因此在这之前对 b 的访问会导致暂时性死区(Temporal Dead Zone,TDZ)的错误。因此这里会输出 ReferenceError: Cannot access 'b' before initialization

因此,这段代码的输出会是类似以下内容的内容:

Window // (全局执行上下文中的 this)
undefined // (foo 函数的参数类型)
ReferenceError: Cannot access 'b' before initialization // (在 b 声明之前访问 b 会导致 ReferenceError)
原文转自:https://fe.ecool.fun/topic/65cc7502-6364-4f96-9609-529d7c5c760a