以下代码段中的作用域链是什么-
var name = 'John';
function foo() {
if (false) {
var name = 'James';
}
console.log(name);
}
foo();
我对此有一些疑问-
foo
中的记录器即使在变量{
在全球范围内可用?是否由于相同的变量
在条件伪造块中重新声明,因此全局变量为
从示波器中删除? undefined
中if语句下的变量声明从foo
替换为var
,函数let
中的logger将从全局范围打印名称。这是怎么工作的?答案 0 :(得分:1)
是的,这是因为用var
声明的变量具有函数作用域,并且被提升到function
的顶部。由于吊起,它记录undefined
。
用let
声明的变量具有块范围,因此在未执行if
块之前,不会声明变量name
。
即使您用if(true)
进行了更改,它也不起作用,因为该变量仅在块内可用。 {}
不在外面。
以下是let
的工作示例。
if(true){
let x = 3
}
console.log(x);
答案 1 :(得分:0)
如果用var
重新声明变量,则它在整个函数中都具有作用域。如果您使用let
而不是var
进行操作,则仅在if
范围内可用。
var name = 'John';
function foo() {
if (false) {
let name = 'James';
}
console.log(name);
}
foo();