编程语言
首页 > 编程语言> > JavaScript 中let的使用 块作用域。从ES2015 开始可以使用 let 关键词声明拥有块作用域的变量。在块 { } 内声明的变量无法从块外访问

JavaScript 中let的使用 块作用域。从ES2015 开始可以使用 let 关键词声明拥有块作用域的变量。在块 { } 内声明的变量无法从块外访问

作者:互联网

JavaScript 中let的使用 块作用域。从ES2015 开始可以使用 let 关键词声明拥有块作用域的变量。在块 { } 内声明的变量无法从块外访问
https://blog.csdn.net/weixin_42754922/article/details/122259217

        在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域函数作用域

  1. 全局(在函数之外)声明的变量拥有全局作用域全局变量可以在 JavaScript 程序中的任何位置访问。
    1. var carName = "porsche";
    2. // 此处的代码可以使用 carName
    3. function myFunction() {
    4. // 此处的代码也可以使用 carName
    5. }
  2. 局部(函数内)声明的变量拥有函数作用域局部变量只能在它们被声明的函数内访问。

    1. // 此处的代码不可以使用 carName
    2. function myFunction() {
    3. var carName = "porsche";
    4. // code here CAN use carName
    5. }
    6. // 此处的代码不可以使用 carName
  3. 在 ES2015 之前,JavaScript 是没有块作用域的。从ES2015 开始可以使用 let 关键词声明拥有块作用域的变量。在块 { } 内声明的变量无法从块外访问:

    1. {
    2. let x = 10;
    3. }
    4. // 此处不可以使用 x

    简单例子来看下let和var的区别:

    1. //使用var
    2. var x = 10;
    3. // 此处 x 为 10
    4. {
    5. var x = 6;
    6. // 此处 x 为 6
    7. }
    8. // 此处 x 为 6, 在块中重新声明变量也将重新声明块外的变量
    9. /********************************/
    10. //使用let
    11. var x = 10;
    12. // 此处 x 为 10
    13. {
    14. let x = 6;
    15. // 此处 x 为 6
    16. }
    17. // 此处 x 为 10, 在块中重新声明变量不会重新声明块外的变量
  4.  使用 JavaScript 的情况下,全局作用域是 JavaScript 环境。在 HTML 中,全局作用域是 window 对象。

      通过 var 关键词定义的全局变量属于 window 对象:

    1. var carName = "porsche";
    2. // 此处的代码可使用 window.carName

      通过 let 关键词定义的全局变量不属于 window 对象:

    1. let carName = "porsche";
    2. // 此处的代码不可使用 window.carName
  5. 在相同的作用域,或在相同的块中,使用 var 和let重新声明 JavaScript 变量遵循以下规则:

    1. {
    2. var x = 10; // 现在,x 为 10
    3. var x = 6; // 现在,x 为 6
    4. }
    5. {
    6. var x = 10;
    7. let x = 6; // 不允许
    8. }
    9. {
    10. let x = 10;
    11. var x = 6; // 不允许
    12. }
    13. {
    14. let x = 10;
    15. let x = 6; // 不允许
    16. }
  6. 通过 var 声明的变量会提升到顶端。通过 let 定义的变量不会被提升到顶端。在声明 let 变量之前就使用它会导致 ReferenceError。

    1. // 在此处,可以使用 carName
    2. var carName;
    1. // 在此处,不可以使用 carName
    2. let carName;

标签:10,变量,作用域,var,let,carName
来源: https://www.cnblogs.com/sunny3158/p/16033190.html