这是我参与「第四届青训营 」笔记创作活动的的第5天。
一、本堂课重点内容:
1. 初识ES6
2. 块级作用域问题
3. 对象字面量增强语法
4. 箭头函数
二、详细知识点介绍以及例子:
1、 初识ES6
ES6是JS语言的新一代标准,弥补了其在ES5语法中的不足,成为了企业级开发语言。
在上一篇的JS学习笔记中的语法糖几乎都是ES6引入的,在此对ES6语法的解决方案进行下一步的研究。
2、 块级作用域问题
目标是输出点击按钮的编号
作为js新手,我第一次是这样写的(错误示例):
for (var i=0;i<btns.length;i++){ btns[i].onclick=function (){
alert('点击了第'+i+'个'); } }
点击后却没有达到想要的效果——每个按钮输出值都是第5个
后来才知道,需要闭包(使用匿名函数限制数据值传递以及访问)
for (var i=0;i<btns.length;i++){ (function (num){//通过闭包解决i 块级访问冲突问题(通过函数划分作用域) btns[i].onclick=function (){ alert('点击了第'+num+'个'); } })(i)//i作为num参数传入 }
这样,传入的i仅仅只是匿名函数的实际参数值,在循环中i变化后已经与匿名函数中的值没有直接关系,可以做到每个元素的事件绑定。
同样,这样的语法让代码看起来更加的复杂,对我(外行)不友好。
于是有了ES6语法:
let btns=document.getElementsByTagName('button'); for(let i=0;i<btns.length;++i){ btns[i].onclick=function(){ alert('点击了第'+i+'个'); } }
通过块级访问逻辑来解决了以上问题。
3、 对象字面量增强语法
过去在ES5语法中,对象的属性和方法都是以键值对形式声明定义的,如:
const obj={//平时(过去)的写法 name:'ahab', age:18, run:function(){ console.log('在运行'); }, eat:function(){ console.log('eating'); } };
其中,值还是支持引用外部的变量/对象进行赋值:
const name='zzs'; const age=18; const height=1.88;const obj={//ES5过去的写法可以将外部的变量/常量 进行对象赋值 name:name, age:age, height:height}
但是还是有一些繁琐,特别是方法函数的定义。
在ES6中,以上得到了极大的简化:可以直接引用而不必写成键值对形式而是像在外部定义函数一样,很简单地就写出来了。
const name='zzs'; const age=18; const height=1.88; const obj={//自动将变量名作为key,值作为value name, age, height, run(){//不必写键值对形式 } }
方法函数的定义更加简洁自由了。
4、 箭头函数
箭头函数是传统function(){}的简写,利于将函数作为回调传入另一个函数时的语法简化。
()=>{}等价于function(){},其中括号()在只有一个参数时可以省略,括号{}在只函数体只有一行时可以省略。
在异步操作开发中,回调函数通常就是以箭头函数的形式写下来的。
这里,将上一篇文章中的语法糖使用方法简化:
/*还有更简洁的写法=>*/let total=nums.filter(num => num<100).map(num => num*2).reduce((preValue,num) => num+preValue,0);console.log(total);
可见,箭头函数在作为参数时可以极大地简化代码量。
三、课后个人总结
Javascript是一门充满活力的语言,语法标准仍然在继续更新,作为入门小白的我需要加吧劲努力学习,才能够跟上时代的脚步。