📌  相关文章
📜  网络技术问题 | JavaScript 课程测验 1 |问题 30(1)

📅  最后修改于: 2023-12-03 15:27:40.012000             🧑  作者: Mango

网络技术问题 | JavaScript 课程测验 1 | 问题 30

本篇文章主要介绍 JavaScript 课程测验中的第 30 个问题,帮助程序员了解和解决该问题。

问题描述

JavaScript 中,以下哪个语句会抛出错误?

var x = 1;
function foo() {
  console.log(x);
  var x = 2;
  console.log(x);
}
foo();

A. console.log(x);

B. var x = 2;

C. 都会抛出错误

D. 都不会抛出错误

问题分析

这个问题主要考察了变量提升(hoisting)的知识点。在 JavaScript 中,以 var 声明的变量会被提升到当前作用域的顶部,但是并不会赋值。所以,当使用 console.log(x) 输出时,x 会被解析为 undefined

而在函数执行的过程中,第一次使用 console.log(x) 输出时,此时包含 x 的作用域已经被创建,但是 x 的值还没有被赋值,所以输出 undefined。接着,var x = 2; 会被执行,此时 x 的值才被赋为 2,第二次使用 console.log(x) 输出时,输出 2

解决方案

根据以上分析,正确答案为 A,即使用 console.log(x) 会抛出错误。要解决这个问题,我们可以把 var x = 2; 语句移动到函数的开头,即可正常输出 12

var x = 1;
function foo() {
  var x = 2;
  console.log(x);
}
foo();
总结

JavaScript 中变量提升是我们需要注意的知识点之一,避免在未声明变量的情况下使用该变量。在实际开发中,我们也可以使用 ESLint 进行代码检查,从而避免一些潜在的问题。