1foo(typeof a); 2function foo(p) { 3 console.log(this); 4 console.log(p); 5 console.log(typeof b); 6 let b = 0; 7}
参考答案:
最终答案:输出全局对象、'undefined',然后抛出 ReferenceError 错误。
这段代码涉及了几个关键点:变量提升(Hoisting)、typeof 运算符的特性、函数作用域内的 let 声明的“暂时性死区”,以及函数调用中的 this 指向。
1foo(typeof a); 2 3function foo(p) { 4 console.log(this); 5 console.log(p); 6 console.log(typeof b); 7 let b = 0; 8}
foo 被函数声明提升,因此在调用 foo(...) 时已可用;a 并未声明;b,其声明在函数作用域内,且使用了 let,存在暂时性死区(TDZ)。foo(typeof a)typeof a:虽然变量 a 未定义,但 typeof 操作符在访问未声明变量时不会抛错,而是返回 'undefined';
typeof a 的值是 'undefined';foo 被调用,参数 p 传入 'undefined'。
foo 开始执行1function foo(p) { 2 console.log(this); // (1) 3 console.log(p); // (2) 4 console.log(typeof b);// (3) 5 let b = 0; 6}
(1) console.log(this);
在非严格模式下,this 指向 全局对象(浏览器中为 window,Node 中为 global);
若开启严格模式,则为 undefined;由于题目未开启严格模式,这里输出全局对象。
(2) console.log(p);
输出参数值,即 'undefined'
(3) console.log(typeof b);
关键点:变量 b 在此处已被创建,但尚未初始化(let 声明的特性),处于 TDZ(暂时性死区)。
访问它会触发 ReferenceError 异常。
1<global object> // console.log(this) 2"undefined" // console.log(p) 3ReferenceError: Cannot access 'b' before initialization
最近更新时间:2025-08-04

题库维护不易,您的支持就是我们最大的动力!