js var、let、const声明变量

var声明

var varname= 10;

变量值可以没有,即 var varname,那么varname默认就是undefined;

var 作用域的理解:js作用域的理解

var 定义的时局部变量,例如:var a = 3; b=5;那么a 是局部变量,b是全部变量;

let声明

ES6 新增了 let 命令,用来声明变量。它的用法类似于 var,但是所声明的变量,只在 let 命令所在的代码块内有效。

1. 变量名不能重复

  • let 声明的变量,变量名不能重复! 而且必须先声明后使用。
1  var a = 0;
2     let a = 1;  // 报错 --- 标识符 'a' 已经声明
3     console.log(a);

VM1019:2 Uncaught SyntaxError: Identifier 'a' has already been declared

2. 块级作用域

  • 块级作用域,相当于局部作用域。在JS中,只有函数才能创造一个局部作用域,但是在ES6中,只要是个 { } 都是块级作用域(局部作用域)。
   // 对象:
     {
         var a = 1;
         let b = 2;
     }
     console.log(a);  // a = 1    
     console.log(b);  // 报错 --- b is not defined

3. let 声明的变量只能在当前作用域使用

  • js5 中 用 var 在 for 中声明的变量,可以再外部访问。
  • es6中 用 let 在 for 中声明的变量 ,无法在外部访问。
  • 在 js 中,全局变量可以在局部环境下使用,局部变量不能在全局下使用。
  • 在 es6 中,let 声明的变量,全局变量只能在全局使用,局部变量只能在局部使用。而且全局声明的变量与局部声明的变量没有任何关系, 变量名都可以一样。
  // 在 js 中函数创造局部环境 
    for (var i = 0; i < 10; i++) {
        var a = i;
    }
    console.log(i);     // 10
    console.log(a);     // 9

 

// es6 中 用 let 在 for 中声明的变量 ,无法在外部访问。
    for (let i = 0; i < 10; i++) {
        let a = i;
    }
    console.log(i);     // i is not defined
    console.log(a);     // 没执行到

4.暂时性死区

在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”

{
        console.log(a);   //undefined。
        var a = 1;        // 局部作用域
        console.log(a);//1
}

let 声明的变量 ,必须先声明再使用,否则报错;

{
        console.log(a);   // 报错 --- 在初始化之前无法访问'a'     应该先声明后使用。
        let a = 1;        // 局部作用域
        console.log(a);
}

const关键字

  • 在ES6中用来声明静态常量。
  • 常量在声明时,所有字母必须大写, 必须赋值。
  • 一旦声明,常量的值就不能改变。
    const PI = 3.1415926;
    console.log(PI);
    PI = 0; 
    console.log(PI);    // 报错 --- 常量无法修改,  对常数变量的赋值。
    const ABC;
    console.log(ABC);   // 报错 --- 在const声明中缺少初始化  
 conset 和let在作用域上一致;区别是let定义变量,const定义常量;

参考原文地址:https://www.jianshu.com/p/fd427a0c2c23
posted @ 2022-08-17 16:06  啄木鸟伍迪  阅读(206)  评论(0)    收藏  举报
//火箭 GenerateContentList();