var、let 和 const的区别

1.变量和常量关键词
1.1 let 关键词

  • 有块级作用域 (防止变量污染):一对大括号就是一个程序块,在大括号之中声明的变量,出了大括号就不能用了
      for (let i = 1; i <= 5; i++) {
        console.log(i); // 1 2 3 4 5
      }
      console.log(i); // 报错 i is not defined

  • 没有变量提升 (保证程序的逻辑通畅)
      console.log(a); //undefined
      var a = 10;
      console.log(b); //Cannot access 'b' before initialization
      let b = 10;
  • 不能重复声明变量 (保证变量唯一性)
      let a = 20;
      let a = "nihao"; 
      console.log(a);//报错: Identifier 'a' has already been declared
  • 暂时性死区(块级作用域内部声明的变量如果和外部声明的变量重名,不会冲突)
//虽然在一个页面中声明了两个同名的变量,但是处于不同的作用域内,所以不会产生报错
let a = 10;
{
    let a = 'abc';
    console.log(a);   //正常输出abc
}
console.log(a);  //正常输出10

1.2 let 块级作用域

    
    
    
    

1.3 const 常量
一旦赋值就不能改变的量就是常量, 常量也有块级作用域
特点:

  • 也有块级作用域
//用块级作用域
{
   const PI = 3.14;
   console.log(PI);
}
console.log(PI);   //报错:  PI is not defined
  • 必须要初始化值
//必须初始化
const PI;   //报错: Missing initializer in const declaration
  • 复杂数据类型可以更改内部值
const obj = {
    name: 'zs',
    age : 20,
    say : function () {
        console.log('ok');
    }
}
// obj = {}; //报错
obj.name = 'ls';
obj.say = function () {
    console.log('okok');
}

var、let 和 const的区别

  • var和let都能声明变量,但是let更严谨一些,以后都推荐使用let来声明变量。
  • let的特殊点: 不能提升变量(保证程序的逻辑通畅)、 有块级作用域(避免变量交叉污染)、不能重复声明保证变量的唯一性,块级作用域会暂时性死区
  • const用来声明常量,常量是不能改变的量,常量也有块级作用域,初始化常量时必须赋值
  • 能用const就用const (因为cosnt速度更快)

你可能感兴趣的:(var、let 和 const的区别)