ES11 中全局变量和局部变量的差异

阅读时长 3 分钟读完

在 ES11 中,全局变量和局部变量的区别仍然存在着。全局变量指的是在函数外部声明的变量,而局部变量则是在函数内部声明的变量。本文将详细介绍全局变量和局部变量的差异,并给出示例代码。

全局变量的差异

全局变量的最大作用是在整个程序中都可以使用。对于ES11,全局变量的声明依旧使用 var 或 let 关键字。但是需要注意,使用 var 声明全局变量会将变量提升到全局作用域中,而 let 声明则不会。示例如下:

在上述示例中,使用 var 声明的变量 a 被提升到了全局作用域中,因此可以在 if 块外使用。而使用 let 声明的变量 b 则只在 if 块的作用域中存在,所以在外部使用时会报错。

此外,在 ES11 中,还有一个新的关键字 const 来声明全局变量。与 let 相同,使用 const 声明的变量也不会被提升到全局作用域中。但是,由于 const 声明的变量是不可变的,因此需要慎重使用。示例如下:

在上述示例中,尝试在 if 块外访问 c 变量时,会报错因为 c 变量只在 if 块内部存在。

局部变量的差异

在函数内部声明的变量被称为局部变量。在 ES11 中,使用 var、let、const 都可以声明局部变量。但是,它们在作用域和存储方式上存在着一些差异。

首先是 var 声明的局部变量,它的作用域是整个函数体。示例如下:

-- -------------------- ---- -------
-------- ----- -
  --- - - -- -- -- --- -------
  -- ------ -
    --- - - --
  -
  -------------- ---
-

------ -- - -

在上述示例中,变量 a 和 b 都被定义在函数体内部,它们的作用域是整个函数体。而且,使用 var 声明的变量被提升到了函数体的顶部,所以在函数体内部的任意位置都可以访问它们。

接下来是 let 和 const 声明的局部变量。它们的作用域是代码块内部。示例如下:

-- -------------------- ---- -------
-------- ----- -
  --- - - -- -- -- --- -------
  -- ------ -
    ----- - - --
  -
  -------------- ---
-

------ -- - --------------- - -- --- -------

在上述示例中,变量 c 和 d 都被定义在 if 块内部,它们的作用域仅仅局限于 if 块内部。而且,使用 let 和 const 声明的变量是不会被提升到代码块顶部的。

总结

本文介绍了 ES11 中全局变量和局部变量的差异,并给出了相关的示例代码。在编写代码时,需要注意全局变量和局部变量的作用域和存储方式。此外,应当尽可能地避免使用 var 声明变量,而使用 let 和 const 声明变量来保证作用域的正确性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64507059980a9b385b97acea

纠错
反馈