以下代码片段中的范围链是什么 -
var name = 'John';
function foo() {
if (false) {
var name = 'James';
}
console.log(name);
}
foo();
我对此有几个疑问 -
- 为什么即使变量在全局范围内可用,函数中的记录器仍在
foo
打印?undefined
是因为在条件 falsy 块中重新声明了相同的变量,因此全局变量被从范围中删除了吗? - 此外,如果我们将函数内部 if 语句下的变量声明替换为
foo
tovar
,let
则函数内部的记录器会foo
从全局范围打印名称。这是如何工作的?