在 ES11 中,全局变量和局部变量的区别仍然存在着。全局变量指的是在函数外部声明的变量,而局部变量则是在函数内部声明的变量。本文将详细介绍全局变量和局部变量的差异,并给出示例代码。
全局变量的差异
全局变量的最大作用是在整个程序中都可以使用。对于ES11,全局变量的声明依旧使用 var 或 let 关键字。但是需要注意,使用 var 声明全局变量会将变量提升到全局作用域中,而 let 声明则不会。示例如下:
// 全局作用域 if (true) { var a = 1; // 使用 var 声明的变量 let b = 2; // 使用 let 声明的变量 } console.log(a); // 1 console.log(b); // ReferenceError: b is not defined
在上述示例中,使用 var 声明的变量 a 被提升到了全局作用域中,因此可以在 if 块外使用。而使用 let 声明的变量 b 则只在 if 块的作用域中存在,所以在外部使用时会报错。
此外,在 ES11 中,还有一个新的关键字 const 来声明全局变量。与 let 相同,使用 const 声明的变量也不会被提升到全局作用域中。但是,由于 const 声明的变量是不可变的,因此需要慎重使用。示例如下:
// 全局作用域 if (true) { const c = 3; // 使用 const 声明的变量 } console.log(c); // ReferenceError: c is not defined
在上述示例中,尝试在 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