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

es是js的规范,而js是具体实现

将es6转化为es5代码工具:运用的多的是babel

在线转换地址:babeltraceur(属于谷歌)

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 i = 0; i < 3; i++) {
2       console.log(i)
3     }
4     for (var j = 0; j < 3; j++) {
5       console.log(j)
6     }
7     // console.log(i)//i is not defined
8     console.log(j)//3

看下面这种情况:

 1 var k = []
 2     for (var i1 = 0; i1 < 5; i1++) {//var i1,申明了全局变量i1,只存在一个i1;即每次循环的i1指向的都是同一个i1
 3       k[i1] = function () {
 4         console.log(i1);
 5       }
 6     }
 7     k[3]();//5
 8 
 9     var p = []
10     for (let i2 = 0; i2 < 5; i2++) {//let i2,申明变量i2,只在块级作用域有效;即每次循环的i2都是新的、重新申明的变量(同时js引擎内部可以记住上一次循环的值)
11       p[i2] = function () {
12         console.log(i2)
13       }
14     }
15     p[3]()//3

注意下面这种情况:

1 for(let i3=0;i3<3;i3++){//圆括号里面是一个作用域
2       let i3=10//花括号里面又是一个作用域
3       console.log(i3)
4     }
5     //输出:10 10 10 

let不存在变量提升(对比var变量提升)

1 console.log(i4)//i4 is not defined
2   let i4=10 
3 console.log(i5) //undefined 未赋值
4     var i5=100

暂时性死区:在es6中,如果区块中存在let和const命令申明的变量,这个区块就对变量形成封闭作用域。即暂时性死区(temporal dead zone,简称TDZ)

1 var people=100
2     if(true){
3       //TDZ开始
4       // console.log(people)//people is not defined
5       let people=1000//TDZ结束
6       console.log(people)
7     }

暂时性死区本质:进入区块,只有let申明变量后,才能进行访问

let不允许在相同作用域下重复申明变量

1 function test(){
2       let a=10;
3       // var a=100
4       let a=1000
5     }
6     test()//报错,a已被申明

块级作用域的出现使得IIFE不再必要了;块级作用域外部不能访问块级作用域中的let申明的变量;借助花括号(可以嵌套多个),块级作用域的写法:

1 {
2   let a100=100
3  }
4  console.log(a100)//报错

const:const申明只读的常量;申明时必须同时赋值,否则报错;同理,const与let一样都是块级作用域范围

实质上:const是保证变量指向的内存地址不得改动。对于简单类型(数值,字符串,布尔值),表现为值不能改变;而对于复合类型(数组,对象),不变的是内存地址,指向的数据结构可能会变动

 1 const PI=3.14
 2     console.log(PI)
 3 
 4     // const AB//报错,必须申明时同时赋值
 5     // AB=1
 6     
 7     const ABC=[]
 8     ABC[0]='hello'
 9     ABC[1]='hi'
10     console.log(ABC)
11     // ABC={}//这时报错

同时:ES6中,let,const,class申明的变量不再是顶层对象的属性;而var ,function申明的依然是顶层对象的属性(为了保持兼容性)

1 console.log(window.PI)//undefined;PI是上面代码中由const申明的常量

参考:更多详情请点击阮一峰前辈的ECMAScript 6 入门

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

MySQL中字节、编码、长度、值的关系 原

0.一个汉字占多少字节与编码有关:          UTF-8:一个汉字=3个字节             GBK:一个汉字=2个字节  1.var...

953
来自专栏CaiRui

Python列表删除的三种方法

1、使用del语句删除元素 >>> i1 = ["a",'b','c','d'] >>> del i1[0] >>> print(i1) ['b', 'c',...

2628
来自专栏coding for love

ES6常用新特性学习1-let和const

在ES6以前,变量的声明都是使用var关键字,且会进行变量声明提升。另外,我们曾经讲过,JS中是没有块级作用域的,这一点也带来了很多的不便。ES6 新增了let...

682
来自专栏抠抠空间

细数Python中的数据类型以及他们的方法

一、数据类型的种类及主要功能 1、数字类型   数字类型主要是用来计算,它分为整数类型int和浮点类型float 2、布尔类型   布尔类型主要是用于判断,它分...

3375
来自专栏小二的折腾日记

《effective C++》from line 1 to line 12

包含着最初的以c语言为基础的C,面向对象的C++,C++的泛型编程,以及STL。在我们使用的过程中,可能会穿插,但是我们需要根据不同的情况使用不同的策略。

843
来自专栏Petrichor的专栏

python: copy库 与 list拷贝

1381
来自专栏阿凯的Excel

Python读书笔记12(IF语句应用)

今天和大家分享的是所有函数、所有编程的基础,判断! IF语句! IF语句肯定是进行判断,为真怎样,为假如何。 那这个真假就是某个条件是否满足,和Python相...

3739
来自专栏LinkedBear的个人空间

唠唠SE的集合-00——概述 原

                        由于是数组实现,在增和删的时候会牵扯到数组增容、以及拷贝元素,所以慢。

912
来自专栏惨绿少年

AWK常用技巧

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确...

2104
来自专栏大前端_Web

javascript高级程序设计(4-5)章笔记

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1064

扫码关注云+社区

领取腾讯云代金券