foo(typeof a);
function foo(p) {
console.log(this);
console.log(p);
console.log(typeof b);
let b = 0;
}
在这段代码中,我们首先遇到了一个函数声明 foo
,然后在 foo
函数内部,有三个语句:
console.log(this);
: 打印函数foo
的执行上下文中的this
值。由于foo
是在全局环境中声明的,因此this
指向全局对象(在浏览器环境下通常是window
对象)。console.log(p);
: 打印参数p
的类型。这个参数的值是在调用foo
函数时传入的,因此这里会输出传入的参数类型。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)