JS每日一题2024.5.8

56 阅读1分钟
function sayHi() {
  console.log(name);
  console.log(age);
  var name = 'Lydia';
  let age = 21;
}

sayHi();
  • A: Lydia and undefined
  • B: Lydia and ReferenceError
  • C: ReferenceError and 21
  • D: undefined and ReferenceError

答案

C

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