ES6基础之let、const

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(对象名)方法设置对象属性不可被扩展。

原文地址:https://www.cnblogs.com/rickdiculous/p/12240875.html

时间: 2024-11-08 03:30:33

ES6基础之let、const的相关文章

es6基础学习二 const

es5是没用常量声明这个选项,es6将其添加其中. 1.基本用法 const 声明一个只读常量.一旦申明,常量的值就不能改变. const PI = 3.1415; PI = 3; //SyntaxError const 声明的变量,一旦声明必须初始化(即赋值),否则报错. const foo; // syntaxError 除此之外,const的声明常量类似let声明的变量: a> 不存在变量提升 b> 只在声明所在的块级作用域内有效 c> 不能重复用var.let.const声明 e

ES6 - 基础学习(3): const关键字的本质

const 是如何做到变量在声明初始化之后不允许改变的? 其实 const 保证的不是变量的值不允许改变,而是保证该变量指向的内存地址所保存的数据不允许改变. 由于简单数据类型和复合数据类型保存值的方式不同: 对于简单类型的数据(数值 number.字符串 string .布尔值 boolean),值就保存在变量指向的内存地址内,因此 const 声明的简单类型变量就等同于常量. 而对于复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址,实际上保存的只是

ES6基础整理(1)

刚开始用vue,很多时候我们都会把ES6这位大兄dei加入我们的技术栈中.但是ES6那么多那么多特性,我们真的需要全部都掌握吗?掌握好常用的.有用的这个可以让我们的开发快速起飞. 接下来我们就聊聊ES6基础常用的知识的总结. es6中的声明变量的方式: // let // 1. let声明变量不可以进行重复声明 // 2. let声明的变量有块级作用域 // const // 声明的叫做常量 // 1. const声明变量不可以进行重复声明 // 2. const声明页有块级作用域 // 3.

es6学习 -- let和const

在es6中let和const声明的变量都只能在其声明的块级作用域中使用,所谓的块级作用域就是{}这么一对大括号. 为什么需要块级作用域? ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景. 第一种场景,内层变量可能会覆盖外层变量. var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = 'hello world'; } } f(); // undefined 上面代码的原

ES6入门-let和const指令

LET: 基本用法:在javascript中声明一个变量通常使用var ,在es6中新增了let指令,用法类似var ,但是let声明的变量只能在所在的代码块有效. ??  使用let声明变量要注意一下几个点: 1,let指令不存在变量提升,所以变量一定要先声明后再使用,否则就会报错. console.info(info); //ReferenceError let info; 2, 存在暂时性死区,也就是说,只要一个块级作用域中使用let声明了某个变量,那么这个变量就被绑定在这个区块了.外界对

es6(一):es6介绍以及let,const

es是js的规范,而js是具体实现 将es6转化为es5代码工具:运用的多的是babel 在线转换地址:babel,traceur(属于谷歌) 1.let申明变量:let其实可以完全取代var,并且没有var这么多副作用 1 { 2 var a = 10; 3 let b = 10;//let申明的变量是块级作用域 4 } 5 console.log(a)//10 6 // console.log(b)//b is not defined let很适合的一种场景是:for 1 for (let

ES6 基础知识-----简记 let const

ES5中只有函数作用域和全局作用域,声明变量使用var,在es6中添加声明变量 let const let 声明块级作用域变量, let 不存在变量提升 var命令会发生"变量提升"现象,即变量可以在声明之前使用,值为undefined.这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用. 为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错. var 声明的变量可以在声明之前使用,是undifind,存在变量提升现象,le

ES6基础之const声明

问题 今天在分析React教程时,观察到如下代码: class Board extends React.Component { constructor(props) { super(props); this.state = { squares: Array(9).fill(null), }; } handleClick(i) { const squares = this.state.squares.slice(); squares[i] = 'X'; this.setState({squares

vue准备知识-es6基础

目录 知识 let和const 模板字符串 箭头函数 对象的单体模式 面向对象 一.知识 http://www.cnblogs.com/majj/https://www.cnblogs.com/majj/category/1216624.html 阮一峰 es6 http://es6.ruanyifeng.com/ https://www.bootcdn.cn/ http://www.cnblogs.com/majj/ 前端 VUE 博客每个人都要去写! html(语义化,除了语义,其他得都没什