JavaScript中var,let与const详解

68 阅读2分钟

var,let与const详解

在JavaScript中有三种声明变量的方式:var以及es6新加入的let与const
首先先用一张图片来表达三者的相同点与不同点:

image.png 由主要是 var 的缺点,存在变量提升,现在var基本上已经不建议使用了,所以下面只详细介绍let与const这两种定义变量的方式

let

1.es6新增加的let声明变量只在所处于的块级作用域有效,块级作用域:就是一对{}产生的作用域,一对{}就代表着一个块级作用域,具有块级作用域的变量只能在块级作用域中访问

 if (true) {
            let a = 10;
            console.log(a);  //1o
            if (true) {
                let c = 20;
            }
            console.log(c); // dedind
        }
        console.log(a);  //a is defind  let声明的变量只在块级作用域里有用

2.var与let的区别

if (true) {
            let num = 10;
            var nuum = 10;
        }
        console.log(nuum); //10
        console.log(num);   //defind

3.防止循环变量变成全局变量

 for (var i = 0; i < 10; i++) {
            //如果把var 改为let那么在for循环外面就访问不到i了 
        }
        console.log(i); //var定义的变量i能够被打印

4.let声明的变量没有变量提升

 //只能先声明再使用
        console.log(cc);   //undefind
        var cc = 10;

        console.log(ee);   //会直接报错
        let ee = 11;

5.let暂时性死区特性 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

 var tmp = 123;
        if (true) {
            console.log(tmp);  //报错 ,此时的tmp变量和全局中的变量没有关系,查找作用域会先查找本级作用域
            let tmp = 'abc';
        }

const

onst关键字用于声明常量,常量就是值(内存地址)不能变化的量

1.使用const常量声明的值同样具有块级作用域

if (true) {
             const a = 10;
             if (true) {
                 const a = 100;
                 console.log(a);  //100
             }
             console.log(a); //10
         }
         console.log(a);  //defind 报错 */

2.使用const声明变量时必须赋值

image.png

const a;   //语法都会直接报错,赋值才行

3.const常量赋值后,值不能修改

  const c = 5;
        c = c + 5;
        console.log(c);   //报错

4.常量声明后的值不能更改,实际上指的是对应的内存地址不可更改

const arr = [100, 200];
        arr[0] = 1;
        arr[1] = 2;
        console.log(arr);  //Array [ 1, 2 ] 
        arr = [3, 4];
        console.log(arr); //报错  ,内部的值可以更改但是内存地址不允许被更改

总结

var 声明变量,其作用域为所在的函数内,且存在变量提升
let 声明变量,其作用域为所在的代码块内,不存在变量提升
const 声明不是变量是常量,在后面出现的代码中不能修改改常量的值