词法环境/编译在这里如何工作
How does lexical environment / compilation works here
当我使用 'var' 时,下面的函数 returns 未定义。
var x = 3;
function func(randomize) {
if (randomize) {
var x = Math.random();
return x;
}
return x;
}
console.log(func(false)); // undefined
当我使用'let'时,同样的功能returns 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
,它将定义所有通过全局范围以下的范围。这就是为什么当你调用 func(false)
因为 x 在全局范围内,它仍然被定义为 3。
var
是执行上下文范围。因此,当您 运行 函数 func(false)
时,它在函数 运行 时没有 x 的上下文,因为函数中没有定义 x。
当我使用 'var' 时,下面的函数 returns 未定义。
var x = 3;
function func(randomize) {
if (randomize) {
var x = Math.random();
return x;
}
return x;
}
console.log(func(false)); // undefined
当我使用'let'时,同样的功能returns 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
,它将定义所有通过全局范围以下的范围。这就是为什么当你调用 func(false)
因为 x 在全局范围内,它仍然被定义为 3。
var
是执行上下文范围。因此,当您 运行 函数 func(false)
时,它在函数 运行 时没有 x 的上下文,因为函数中没有定义 x。