ES6之箭头函数

箭头函数简化了原生写法,让代码更加简洁,来看一下基础的写法

箭头函数写法

基础写法

//原生写法
let fn = function(a,b){
	return a+b;
}
//箭头函数写法
let fn = (a,b)=>{
	return a+b;
}

箭头函数的写法也就是比原生的写法少了function多了箭头,所以这可能就是箭头函数的由来吧!

简化写法

1) 当形参有且只有一个的时候,可以省略小括号

let fn = n =>{
	return n*n;
}

2)当代码体只有一条语句的时候可以省略花括号

注意:此时return必须省略,而且语句的执行结果就是函数的返回值

//返回n+n的值
let add = n => n+n;
console.log(add(2))   //4

使用箭头函数注意事项

1.不能作为构造实例化对象

			 let Person = (name,age)=>{
		     	this.name=name;
			 	this.age=age;
			 }

此时会报错
在这里插入图片描述

2.不能使用arguments变量

			let fn = ()=>{
				console.log(arguments)
			}
			fn();

此时会显示arguments未定义
在这里插入图片描述

this相关问题

可以看一下对this指向的介绍全面解析this指向问题,更方便理解。

箭头函数不适用this的四种标准规则,而是根据外层(函数或全局)作用域来决定this的

this是静态的。this始终指向函数声明时所在作用域下的this的值。

			function getName(){
				console.log(this.name);
			}
			let getname2 = ()=>{
				console.log(this.name);
			}
			// 设置window对象的name属性
			window.name = 'angula'
			const obj = {
				name:'obj name'
			}
			// 直接调用
			getName();   //angula
			getname2();  //angula
			//call调用
			getName.call(obj);  //obj name
			getname2.call(obj);  //angula

我们直接调用的话,this指向window,则会打印angula,而使用call对this进行绑定之后,我们会发现,普通的写法this发生了改变,打印obj name,但是箭头函数的this并未发生改变,依旧打印angula

来进行一个小实践

1.实现一个小功能,点击div之后,将div块的背景颜色设置为red

		<div id="main">
		</div>
		<script type="text/javascript">
			// 1. 点击div 2秒后颜色变成红色
			// 获取元素
			let main = document.getElementById('main');
			// 绑定事件
			  //原本写法
			main.addEventListener("click",function(){
				let _this=this;
				setTimeout(function(){
					// 修改背景颜色
					// console.log(this) //window
					_this.style.background = 'red'
				},2000)
			})
		</script>

这是我们原本的写法,不使用箭头函数,这时候需要保存一下this,不然直接使用this会指向window。

箭头函数写法

		<div id="main">
		</div>
		<script type="text/javascript">
			// 1. 点击div 2秒后颜色变成红色
			// 获取元素
			let main = document.getElementById('main');
			main.addEventListener("click",function(){
			    //箭头函数写法
				setTimeout(()=>{
					// 修改背景颜色
					// console.log(this) //this指向当前function
					this.style.background = 'red'
				},2000)
			})

这时候就不需要再对this进行保存了。这时候是不是感觉简化了好多呢?

2.从数组中返会偶数的元素

			const arr = [1,2,3,4,5,6];
			// 原本写法
			const result = arr.filter(function(item){
				if(item%2===0){
					return true;
				}else{
					return false;
				}
			})

是不是感觉这么简单的东西写起来要这么多东西,那么来看一下箭头函数的写法

			const arr = [1,2,3,4,5,6];
			const result1 = arr.filter((item)=>{
				if(item%2===0){
					return true;
				}else{
					return false;
				}
			})

这时候会简单一点点,那么我们来看一下箭头函数简化之后的写法

			const arr = [1,2,3,4,5,6];
			// 简化箭头函数
			const result2 = arr.filter(item => item%2 === 0);

这时候是不是感觉一切努力都不会白费,箭头函数可以使得代码变得更加的简洁呢?

总结:

箭头函数适合与this无关的回调,如定时器,数组的方法回调
不适合与this有关的回调,如事件回调,对象的方法,当然不适合并不是说不能使用箭头函数

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页