词汇环境/编译在这里如何工作

问题描述 投票:0回答:1

当我使用'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

编译在这里如何工作?这是因为词汇环境吗?我对结果感到惊讶。请解释。

javascript let
1个回答
0
投票

let是一个块作用域,这意味着如果在全局作用域中声明let x = 3,它将通过全局作用域下的所有作用域进行定义。这就是为什么由于x在全局范围内而调用func(false)时仍将其定义为3的原因。

var是执行上下文范围。因此,当您运行函数func(false)时,由于在函数中未定义x,因此在函数运行时它与x没有上下文。

© www.soinside.com 2019 - 2024. All rights reserved.