代码之家  ›  专栏  ›  技术社区  ›  Liam Kernighan

JS中的词汇范围界定

  •  2
  • Liam Kernighan  · 技术社区  · 7 年前

    词法作用域是指在您定义的范围内的任何变量 函数from(而不是调用时)位于 功能。考虑这个例子:

    const x = 3;
    
    function f() {
      console.log(x); // this will work
      console.log(y); // this will cause a crash
    }
    const y = 3;
    f();

    定义函数f时变量x存在,但y不存在。 然后我们声明y并调用f,看到x在 作用域:函数f可以访问

    当我在VS代码调试器中运行它时,似乎没有任何错误。

    我懂了

    3.

    3.

    毫无例外。这取决于我使用的ES版本还是其他什么?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Pointy    7 年前

    尽管我认为作者只是简单地选择了一段糟糕的(不正确的)代码来说明这一点,代码 是 作为一种有趣的方式来说明一些相关但不同的东西。因为 y const ,它在函数内部可见,因为它的声明被提升到最近的封闭块(在发布的代码中不显式可见,但它必须在某个地方)。但是,如果函数调用移到 之前 那份声明,你呢 将 由于引用 Y 会发生在有点奇怪的“暂时死区”。对已声明但未初始化的变量的引用 let 或 常数

    如果 Y 已更改为 var 声明,然后将函数调用移到变量声明之前不会导致错误,因为变量是在范围内定义的,但只是(老式的)未初始化,因此 undefined .

        2
  •  3
  •   user8310317 user8310317    7 年前

    const y=3 在之前声明 f() 被称为。如果你移动 y 之后 f() 然后它就会像