ES6基础之letconst

Posted rickdiculous

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6基础之letconst相关的知识,希望对你有一定的参考价值。

 

es6的块级作用域通俗的讲就是一对花括号中的区域(声明对象的花括号不是块级作用域),块级作用域可以嵌套。

 

let

1、le声明的变量只在当前(块级)作用域内有效。

2、let声明的变量不能被重复声明。否则同一作用域下会报错,不同块级作用域可以定义同名变量。

3、let不存在变量提升。先打印再声明会报错。

 

关于暂存死区(了解即可):

1、用var时会从上到下按顺序打印。

2、一般会往上级作用域去找,但用 let 时在es6中向上找到了同一个变量也是拿不到的。因为es6规定如果块级作用域中存在let、const声明的变量,这个变量一开始就会形成一个封闭的作用域。

            var monkey = ‘houzi‘;
            {
                console.log(monkey);  //houzi
                var monkey = ‘little‘;
            }
            console.log(monkey);  //little
            
            
            let m = ‘houzi‘;
            {
                console.log(m);  //报错m is not defined
                let m = ‘little‘;
            }
            console.log(m);

 

const

1、声明常量:const c = ‘我是常量‘

2、常量必须在声明的时候被初始化(即赋值)

3、常量不能重复声明、不存在提升、只能在当前(块级)作用域内有效

4、一旦声明常量,就不能改变(引用类型需要冻结)。但是当常量为引用类型的时候,不能保证不改变;当const声明的值为引用类型(对象、数组、函数)时,const只能保证声明的常量地址不变,不能保证地址上的值不去发生改变。const只能保证指向或引用的地址是不变的。

5、使用const声明时,使用小写字母也不会报错,不过大家一般会使用大写字母。

 

Object.freeze(const)方法可以冻结对象,使其失去被修改的能力(即不能被扩展了)。冻结后的修改会失效,对象的属性依旧为修改之前的。

冻结对象后扩展属性不会报错,冻结数组后扩展属性会报错。这是规定好的。

 

es6之前使用Object.defineProperty(obj,name,value)方法设置常量对象的属性为不可被修改,再使用Object.seal(对象名)方法设置对象属性不可被扩展。

 

以上是关于ES6基础之letconst的主要内容,如果未能解决你的问题,请参考以下文章

ES6 常用总结——第一章(简介letconst)

ES6(2015)新的声明方式 letconst

ES6学习笔记(letconst变量的解构赋值字符串扩展)

ES6的新特性 — 新增关键字letconst

ES6中letconst区别保证看完不后悔,印象还深刻

ES6中letconst区别保证看完不后悔,印象还深刻