ES6箭头函数

箭头函数中的this指向的是定义时的this,而不是执行时的this

一、为什么要有箭头函数

先看如下代码:

const Person = {
	'name': 'little bear',
	'age': 18,
	'sayHello': function () {
 	 	setInterval(function () {
    		console.log('我叫' + this.name + '我今年' + this.age + '岁!')
  		}, 1000)
	}
}
Person.sayHello()

上面的代码运行会是上面结果呢?
上例的输出结果是我叫undefined,今年我undefined岁。
这是因为setInterval执行的时候,是在全局作用域下的,所有this指向的是全局window,而window上没有name和age,所以当然输出的是undefined咯。

那么,我们怎么要解决这个问题呢?
通常的写法是缓存this,然后在setInterval中用缓存的this进行操作,如下

const Person = {
	'name': 'little bear',
	'age': 18,
	'sayHello': function () {
		let self = this
  		setInterval(function () {
   			console.log('我叫' + self.name + '我今年' + self.age + '岁!')
  		}, 1000)
	}
}
const sayHelloFun = Person.sayHello
sayHelloFun()

明明是写在对象里面的方法,为什么还要使用缓存这个对象才能正确使用?
于是在es6的新特性里添加了箭头函数,它能很好的解决这个问题。、

二 、什么是箭头函数

function(){
    console.log('hello')
}

向上面的方法写成箭头函数后是这样的:

()=> conosle.log('hello')

三、和普通函数的区别

主要是两方面的优势:
①不绑定this,arguments
②更简化的代码语法。

  • 3.1不绑定this
    不绑定this的意思就是说:箭头函数的this是在定义的时候就确定好的,以后不管怎样调用箭头函数,箭头函数的this始终是定义的this

  • 3.2不绑定arguments
    箭头函数还有一个比较有特点的地方就是其不绑定arguments,即如果你在箭头函数中使用arguments参数不能得到想要的内容。

四、什么时候不能使用箭头函数

前面我们已经看到了很多关于es6箭头函数的好处,也看到了箭头函数的一些不足。那么我们应该在什么时候使用箭头函数,而什么时候最好不要使用呢?
1.作为对象的方法
最好不要在对象的方法中使用箭头函数,这样可能会导致一些问题的产生。除非你很熟悉箭头函数。
2.不能作为构造函数
由于箭头函数的this不绑定的特点,所以不能使用箭头函数作为构造函数,实际上如果这样做了,也会报错。
3.定义原型方法

function Person (name){
    this.name = name
}
Person.prototype.sayHello = () => {
    console.log(this)
}
var p1 = new Person()
p1.sayHello()
//output  window对象

这里的this指向的是window对象,这点和在对象方法中定义有点像

箭头函数的返回值情况

let fn1 = function (a, b) {
    a + b
}
let fn2 = function (a, b) {
    return a + b
}
let fn3 = (a, b) => a + b
let fn4 = (a, b) => { a + b }
let fn5 = (a, b) => {return a + b}

fn1(1, 2)    
fn2(1, 2)
fn3(1, 2)
fn4(1, 2)
fn5(1, 2)

结果 undefined/ 3/ 3/ undefined/ 3
实验证明,在不添加大括号的时候箭头函数会默认return语句,加了大括号就正常,所以fn4和fn1一样显示undefined

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值