简述var 、let、const的区别

229 阅读1分钟

简述var 、let、const的区别:
一、首先说一下var和let的作用域的区别:
1、var声明变量的作用域是它当前的执行上下文;
let声明变量的作用域是它当前所处的代码块;var 和 let 的作用域规则都是一样的,其声明的变量只在其声明的块或子块中可用。\

<script>
        for (let index = 0; index < 10; index++) {
            let i =index;
            console.log("let defined\'s i "+i);
        }
        /*let声明的变量只在for循环{}内部有效,一旦超出了{}之外就不会生效,此时,
        如果你调用的话就会报错,除非你在全局中也声明了一个同样名字的变量,但是,
        也不能算是for中定义的,所以var和let的作用范围不一样。*/
</script>

2、重复声明问题
var 允许在同一作用域中重复声明,而 let 不允许在同一作用域中重复声明,否则将抛出异常。\

<script>
        var i =9;
        for (let index = 0; index < 10; index++) {
            let i =index;
            console.log("let defined\'s i "+i);
        }
        console.log(i);
</script>
//控制台打印输出:
let defined's i 0
index.html:15 let defined's i 1
index.html:15 let defined's i 2
index.html:15 let defined's i 3
index.html:15 let defined's i 4
index.html:15 let defined's i 5
index.html:15 let defined's i 6
index.html:15 let defined's i 7
index.html:15 let defined's i 8
index.html:15 let defined's i 9
index.html:17 var defined's'9

3、绑定全局对象
var 在全局环境声明变量,会在全局对象里新建一个属性,而 let 在全局环境声明变量,则不会在全局对象里新建一个属性。
一个执行上下文的生命周期可以分为三个阶段:创建、执行、释放。如下图:\

image.png 二、let 与 const 异同
const 与 let 很类似,都具有上面提到的 let 的特性,唯一区别就在于 const 声明的是一个只读变量,类似于Java中的常量;声明之后不允许改变其值。因此,const 一旦声明必须初始化,否则会报错。

<script>
        const PI = 3.14159265358979846264338327950;
        // PI = 123;
        console.log(PI);
        //3.1415926
        /*当我们再次对PI进行修改的时候,
        就会出现index.html:18 Uncaught TypeError: Assignment to constant variable.
        at */
</script>