简单且棘手的前端面试题(JS)

103 阅读1分钟

意外全局变量

Question

以下代码段中用于运算 typeof atypeof b的内容

function foo() {
let a = b = 0;
a++;
return a;
}
foo();typeof a; // => ???typeof b; // =>

Answer

让我们看一下第 2 行:let a = b = 0,该语句声明一个局部变量 a,然儿,它也声 明了全局变量 b。

foo() 范围或全局范围中都没有声明变量 b。因此 JavaScript 将 b = 0表达式解 释为window.b = 0 。换句话说,b 是意外创建的全局变量。

图示:

1654909282846.png

在浏览器中,以上代码片段等效于:


function foo() {
let a;
window.b = 0;
a = window.b;
a++;
return a;
}
foo();typeof a; // => 'undefined'typeof window.b; // => 'number'

typeof a 等于 'undefined',变量 a 存在于 foo()范围内,而在外部范围内不使 用。 因为 b 是一个值为 0 的全局变量,所以 b 的类型的值为 'number'