只是想在我的脑袋周围包裹范围:-)

我如何重构此代码以便能够输出
函数'a', 'b' and 'c'中的third()

没有混淆和不必要的理论的任何解释都将有所帮助。



var a = 1;

first = () => {
  let b = 2;
  second = () => {
    let c = 3;
    console.log(a, b); // Output 1, 2
    third(); // Output 1, 2, 3
  }
  console.log(a); // Output 1
  second();
}

third = () => {
  console.log(a, b, c);
}

first();

最佳答案

b在函数third()的范围内未定义。您还将获得与c相同的错误。如果将“第三”的定义移到“第二”之内,则可以访问“第一”和“第二”的范围,因为它将成为对它们的封闭,然后您将获得预期的行为。



var a = 1;

first = () => {
  let b = 2;
  second = () => {
    let c = 3;
    console.log(a, b); // Output 1, 2
    third = () => {
        console.log(a, b, c);
    }
    third(); // Output 1, 2, 3
  }
  console.log(a); // Output 1
  second();
}


first();





编辑:错别字

10-08 08:03