意外全局变量
Question
以下代码段中用于运算
typeof a和typeof 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 是意外创建的全局变量。
图示:
在浏览器中,以上代码片段等效于:
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'