理解让范围

时间:2017-09-29 08:57:28

标签: javascript variables ecmascript-6 variable-declaration

我对代码的假设是,对于第二个let x,上面的代码位于时间死区。因此不应该抛出错误。

代码

function f(condition, x) {
  if (condition) {
    let x = 100;
    return x;
  }
  let x = 30; // <---- throw error

  return x;
}

f(true, 1);

2 个答案:

答案 0 :(得分:3)

这里的问题是你在同一个<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>中重新声明了同一个变量x两次,因此变量function将被悬挂。

x

此处,第二个 if (condition) { //This x declaration is fine as it wasn't preceded with any others declaration inside the same block scope let x = 100; return x; } //Now this second x declaration will cause the hoisting problem let x = 30; // <---- throw error 声明正在let x = 30;范围内提升x变量。所以结论是你不能在同一范围内多次声明同一个变量。

有关Javascript中可变提升的进一步阅读,请查看:

答案 1 :(得分:1)

问题似乎是 x 已经是一个与外部 x 具有相同范围的函数参数。如果我用 y 更改功能参数 x ,则代码可以正常工作。

<强>代码

function f(condition, y) {
  if (condition) {
    let x = 100;
    return x;
  }
  let x = 30; // <---- doesnt throw error

  return x;
}

f(true, 1);