function sayHi() {
console.log(name);
console.log(age);
var name = 'Lydia';
let age = 21;
}
sayHi();
- A:
Lydiaandundefined - B:
LydiaandReferenceError - C:
ReferenceErrorand21 - D:
undefinedandReferenceError
答案
C
在函数中,我们首先使用 var 关键字声明 name 变量。这意味着变量会被提升(在创建阶段设置内存空间),默认值为 undefined,直到我们实际到达定义变量的那一行。在尝试记录 name 变量的那一行上,我们尚未定义变量,因此它仍然保持 undefined 的值。带有 let 关键字(和 const)的变量会被提升,但与 var 不同,它们不会被初始化。在我们声明(初始化)它们的行之前,它们是不可访问的。这称为“临时死区”。当我们尝试在声明变量之前访问它们时,JavaScript 会抛出 ReferenceError。