ES6之let与const
ECMAScript与JavaScript的关系:ES是JS的标准,JS是ES的实现。 European Computer Manufactures Association欧洲计算机制造联合会。 浏览器对新标准的支持情况:http://kangax.github.io/compat-table/es6/ 关于let
使用var声明或不声明直接使用变量时,本质上是往window对象上添加了属性。 let与var的主要区别:1,let声明的变量旨在当前(块级)作用域{}(对象的{}不算)内有效。2,let声明和const声明的变量不能被重复声明。3,不存在变量提升,不会把声明提前。4,如果块级作用域中存在let或者const声明的变量,这个变量一开始就会形成一个封闭的作用域,形成暂存死区。
在for中使用let时,for后面的括号内算是一个作用域,括号后面的{}算是括号作用域的子作用域。类似作用域的嵌套,第一层是括号内的,第二层是花括号内的{ { } }。
暂存死区: let b = 14; { console.log(b);//报错。不会沿着作用域链查找,因为该作用域有了let声明的变量b,把该针对b变量,把该作用域封闭了,然后let又不会变量提升,提前声明,所以不存在b,所以报错。 let b =5; }
{ let a = 1; { let b = 2; console.log(a);//1 } console.log(b);//报错 } 看不懂的话就自己动手试试!(自己对自己说的)
//js实现一个1-10的按钮点击弹出对应数字 //闭包 for (var i = 1; i < 11; i++) {(function (i) {var btn = document.createElement('button');btn.innerText = i;btn.onclick = function() {alert(i);}document.body.appendChild(btn);})(i); } //let for (let i = 1; i < 11; i++) {var btn = document.createElement('button');btn.innerText = i;btn.onclick = function() {alert(i);}document.body.appendChild(btn); }
关于const
常量-不可改变的量。
常量必须在声明的时候赋值。否则报错。
与let类似的特性:
不能重复声明,不存在变量提升,只在当前块级作用域内有效。
与let的区别:
常量一旦声明就不可改变,但常量如果为引用类型的时候,不能保证不可变。
实质上,const只能保证常量的地址不变,不能保证地址上的内容发生改变。
怎么防止常量为引用类型的时候能被修改的情况:
Object.freeze(引用类型常量);
ES6之前怎么声明常量:1,var xx = xx;//假装是常量。2,Obejct.defineProperty(对象名,'属性名',{ value: '小明', writable: false });//往对象上添加属性,可添加描述,如能不能枚举,修改,配置。Object.seal(对象名);//防止对象被扩展,但是可以修改原有属性。两个结合。完成常量的效果。
使用for-in遍历对象的时候,会将原型上的方法也遍历一边,所以需要obj.hasOwnProperty(属性);//返回true的时候就是自身拥有的属性,而不是原型上拥有的属性。 以下代码自己封装了一个Object.freeze2()方法。
Object.defineProperty(Object, 'freeze2', {//定义属性value: function(obj) {for ( var p in obj ) {if (obj.hasOwnProperty(p)) {Object.defineProperty(obj, p, {writable: false//不可修改属性});if ( typeof obj[p] === 'object' ) {Object.freeze2(obj[p]);}}} Object.seal(obj);//防止对象属性的扩展}});var obj = {age: 55,obj2: {xx: 22,obj3: {ff: 233}}}Object.freeze2(obj);
转载于:https://www.cnblogs.com/zhonghonglin1997/p/10109792.html
ES6之let与const相关推荐
- 【ES6】 let与const详解
[ES6] let与const详解 ES6,全称为ECMAScript6.ES6与js的关系是:前者是后者的规格,后者是前者的实现.换句话说,ES是js的国际化版本,js是ES的子集. 1. let ...
- ES6中使用let, const声明的变量, 在window对象下是获取不到的
ES6中使用let, const声明的变量, 在window对象下是获取不到的 今天在写demo的时候发现, 使用let或者const声明的变量, 在window对象下使用this来获取发现获取不到 ...
- [OHIF-Viewers]医疗数字阅片-医学影像-es6解构赋值-const{}=-let{}=
[OHIF-Viewers]医疗数字阅片-医学影像-es6解构赋值-const{}=-let{}= 解构赋值语法是一种 Javascript 表达式.通过解构赋值, 可以将属性/值从对象/数组中取出, ...
- es6(let与const命令)
es6(let与const命令) 理论区别 var let const 在函数作用域内或者全局有效,没有块级作用域 只在let命令所在的代码块内有效 只在声明所在的块级作用域内有效 能重复声明 不能重 ...
- ES6之let和const
进入前端领域工作将近两年,看过学习过很多大牛的文档和视频,2018年也打算对学过的知识点给出一个小结式的输出,从ES6开始吧. ES6新增 let 命令,用途是用来声明变量.一个新的事物被提出,总是有 ...
- 【ES6】let、const变量提升的验证,以及TDZ死区的理解
前段时间在网上自学ES6,了解到ES6新增的let和const是存在变量提升的,但是由于TDZ(暂时性死区)的存在,在定义前访问会出现错误. 今天在腾讯课堂听老师讲ES6,多次强调let和const没 ...
- 【面试题】【ES6】let和const命令 (面试必看)
给大家推荐一个实用面试题库 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 1.let命令 基本用法 用法类似于var,但是所声明的变量,只在let命令所在 ...
- 关于ES6中let 和 const 命令的用法以及注意事项:
let命令: 基本用法: let定义: 用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> //let代码块内部定义的变量,与var ...
- ES6的let、const命令
1.let命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是 let 所声明的变量,只在let命令所在的代码块内有效. 代码如下: {let a = 1;var ...
- 【ES6 教程】第一章 新的ES6语法03—使用const 关键字定义常量
英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本教程中,我们将学习如何使用 JavaScript const 关键字定义常量. JavaScrip ...
最新文章
- C语言易错题--求最大公约数与最小公倍数之和(辗转相除法)
- 分布式缓存Redis Centos下单节点安装
- 【BZOJ3196】Tyvj 1730 二逼平衡树
- Bech32编码 (3)隔离见证地址
- STL中迭代器的作用,有指针为何还要迭代器
- 辛星浅谈PHP的混乱的编码风格
- 播放框架模块:分而治之
- (枚举)餐厅点餐(fzu2086)
- 并不能一蹴而就的s9t9
- pil对图像加透明 python_使用Python图像处理库Pillow处理图像文件
- 【英语学习】【English L06】U02 Food L2 Salad dressings
- Unity有哪些让做项目事半功倍的插件值得推荐?
- 腾讯游戏安全报告:定制外挂占比过半 游戏黑产资产惊人
- centos activemq 集群配置 Networks of Brokers
- ToneBoosters Plugins Bundle for Mac(音频效果器插件包)
- 春运前夕探秘动车所里的“动车体检医生”
- 首席赚钱源码(外卖券+电影+淘宝客+提现裂变流量主)功能强大
- 中国石油安全问题及解决对策
- 正则表达式,分组,捕获组,反向引用,重复数字正则表达式 ,python 实现
- 基于面部视频的实时心率检测系统 day four
热门文章
- Add NIC to Openfiler 2.3
- maven setting 设置jdk版本
- 算法基础练习--最大公约数和最小公倍数
- MySQL 添加列 修改列 删除列
- 报表统计(六) 访问数据库
- 解析恶意软件***技术特点
- Linux安装配置 VNC Server
- 小辣椒android密码怎样开,小辣椒手机忘记密码怎么恢复出厂设置
- asp向不同的用户发送信息_使用 Linux 命令行与其他用户进行通信 | Linux 中国
- k1658停运到什么时候_2020年春节快递几号停运 2020年春节快递停运时间电商春节放假通知...