当我使用'var'时,下面的函数返回undefined。
var x = 3;
function func(randomize) {
if (randomize) {
var x = Math.random();
return x;
}
return x;
}
console.log(func(false)); // undefined
当我使用'let'时,相同的函数返回3。
let x = 3;
function func(randomize) {
if (randomize) {
let x = Math.random();
return x;
}
return x;
}
console.log(func(false)); //3
编译在这里如何工作?这是因为词汇环境吗?我对结果感到惊讶。请解释。
let
是一个块作用域,这意味着如果在全局作用域中声明let x = 3
,它将通过全局作用域下的所有作用域进行定义。这就是为什么由于x在全局范围内而调用func(false)
时仍将其定义为3的原因。
var
是执行上下文范围。因此,当您运行函数func(false)
时,由于在函数中未定义x,因此在函数运行时它与x没有上下文。