Javascript学习笔记(下) | 青训营笔记

52 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的的第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是一门充满活力的语言,语法标准仍然在继续更新,作为入门小白的我需要加吧劲努力学习,才能够跟上时代的脚步。