从零开始学 Web 之 ES6(三)ES6基础语法一
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新......
- github:https://github.com/Daotin/Web
- 微信公众号:Web前端之巅
- 博客园:
一、let
作用:与var类似, 用于声明一个变量。
let和var的区别:
- 在块作用域内有效
- 不能重复声明
- 不会预处理, 不存在提升
<script type="text/javascript"> console.log(res); //不会预处理, 不存在提升,报错 // 不能重复声明 let res = 10; let res = 10; // 报错 </script>
应用:循环遍历加监听
我们先开看一个例子:
<body> <button>测试1</button> <button>测试2</button> <button>测试3</button> <script type="text/javascript"> let btns = document.getElementsByTagName('button'); for (var i = 0; i < btns.length; i++) { btns[i].onclick = function () { alert(i); } } </script> </body>
我们分别点击按钮的时候,分别打印多少?
结果:打印的都是2。因为回调函数的写法会进行覆盖操作。如何解决?
方法一:使用闭包。
for (var i = 0; i < btns.length; i++) { (function(){ btns[i].onclick = function () { alert(i); } })(i); }
这种方式相当于,每个回调函数有个自己的区间,各个区间互不干扰。而 let 正好有这个特性。
方法二:将 for循环的 var改为let即可。
二、const
作用:定义一个常量。
特点:不能修改,其它特点同let。
const uName = 'Daotin';
三、变量的解构赋值
理解:从对象或数组中提取数据, 并赋值给变量(多个)。
1、对象的解构赋值
之前我们要获取一个对象的属性,会定义变量然后接收对象的属性值。
let obj = {name : 'kobe', age : 39}; let name = obj.name; let age = obj.age; console.log(name, age);
对象的解构赋值可以这样做: