javascript高级篇之const,let,var的区别与作用

221 阅读2分钟

前言

了解const,let和var之前,我们需要知道

什么是块?

在javascript中,{}两个括号就是一个块

//这是一个块
{
    console.log('块内代码');
}
console.log('块外代码');

什么是变量提升?

//例一

//这里先输出
console.log(buibuibui);  //会输出undefined

//上面输出完了。再执行
var buibuibui = 10;

咋javascript中,所有使用var声明的变量都会默认被提升到代码的最顶部。 所以例一的代码等同于例二的代码

//例二

var buibuibui;

console.log(buibuibui);

buibuibui = 10;

正文 var,let,const的区别和作用

判断变量提升 案例 👇


        console.log(varParams);  //输出undefined  --因为 var 有变量提升
        console.log(letParams);  //直接报错,变量未声明 --因为  有变量提升
        console.log(constParams); //直接报错,变量未声明 --因为 var 有变量提升

        var varParams = 10;
        let letParams = 20;
        const constParams = 30;

得出结论:var具备变量提升,但是 let和const并不具备

判断块级作用域 案例👇

{
    var buibuibui = "buibuibui";  //没有块的概念,再在块外面也可以访问
    let tututu = "tututu";   //有块的概念,在块外无法访问
    const boomboom = "boomboom"  //有块的概念。在块外无法访问
}

console.log(buibuibui);  //输出 buibuibui
console.log(tututu);   //报错给你看 tututu is not defined
console.log(boombomm); //报错给你看 boomboom is not defined

const声明的值无法二次修改和必须进行初始化赋值

//const声明的变量必须进行初始化赋值 比如
const buibuibui   // ×  会直接报错 ---报错信息:'const' declarations must be initialized
const buibuibui = 10; // √ 正常运行  ---啥事都不会有
//使用const声明的变量无法改变
const tututu = 100;  //赋值

//const声明的变量无法更改值
tututu = 99;  //报错 error:Assignment to constant variable

总结

var

  • 有变量提升
  • 没有块级作用域或者是var根本没有块的概念,可以在块外访问
  • 可以修改值

let

  • 没有变量提升
  • 有块级作用域的概念,无法在块外访问
  • 可以修改值

const

  • 没有变量提升
  • 有块级作用域概念,无法在块外访问
  • 不能修改值
  • 声明时候必须进行初始化赋值

课外

const arr  =[];  //使用const声明数组
arr.push(1);     //往数组内添加内容,不报错!!
//但是
arr = [1]; //这个会报错

理论上来说,使用const声明的变量是不允许改变的,为什么数组使用push()不会报错?

这是关于const的检测原理,不在本片文章的讲解范围内。涉及引用类型和值类型,栈内存的堆内存的知识点,详细请查看我的另一篇文章<<const的数组和对象为什么可以改变>>