📅  最后修改于: 2023-12-03 15:27:40.012000             🧑  作者: Mango
本篇文章主要介绍 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;
语句移动到函数的开头,即可正常输出 1
和 2
。
var x = 1;
function foo() {
var x = 2;
console.log(x);
}
foo();
JavaScript 中变量提升是我们需要注意的知识点之一,避免在未声明变量的情况下使用该变量。在实际开发中,我们也可以使用 ESLint 进行代码检查,从而避免一些潜在的问题。