一、定义函数的方式

//1.function
const aaa = function () { }
//2.对象字面量中定义函数
const obj = {
bbb() { }
}
//3.ES6中的箭头函数
const ccc = (参数) => { }

二、箭头函数的参数和返回值

1、参数问题

//1.1两个参数
const sum = (num1, num2) => {
return num1 + num2
}
//1.2一个参数(括号可以省略)
const power = num => {
return num * num
}

2、返回值

//2.1代码块中有多行代码时正常写

const test = () => {
console.log('11111')
console.log('22222')
}
//2.2代码块中有一行代码时省略大括号
const power = num => num * num

三、箭头函数中的this

//1.什么时候使用箭头函数函数:当把一个函数作为另一个函数的参数的时候
setTimeout(function () {
console.log(this) //window
},1000) setTimeout ( () => {
console.log(this) //window
},1000) const obj = {
aaa() {
setTimeout(function () { //函数调用是通过call,call会把window作为第一个参数传进去
console.log(this) //window
}) setTimeout(() => { //箭头函数没有自己的this,只会一层一层向外查找
console.log(this) //aaa obj对象
})
}
}
obj.aaa() const obj = {
aaa() {
setTimeout(function () { //函数调用是通过call,call会把window作为第一个参数传进去
setTimeout(function (){
console.log(this) //window
}) setTimeout( () => {
console.log(this) //window
})
}) setTimeout(() => { //箭头函数没有自己的this,只会向外作用域一层一层向外查找
setTimeout(function (){
console.log(this) //window
}) setTimeout( () => {
console.log(this) //aaa obj对象
})
})
}
}
obj.aaa()

总结:

箭头函数没有自己的this,他是在定义函数的时候绑定的,而不是在执行过程中绑定的,它继承了定义函数的对象,例如:

function Person () {
this.name = 'lihh',
this.age = 18,
setInterval(() => {
console.log (this)
console.log('我叫' + this.name + '今年' + this.age)
}, 1000);
} let p = new Person()

打印结果是this指向了Person

再看下面这种非箭头函数:

function Person () {
this.name = 'lihh',
this.age = 18,
setInterval(function () {
console.log (this)
console.log('我叫' + this.name + '今年' + this.age)
}, 1000);
} let p = new Person()

打印结果是this指向了window,这是由于setInterval跟setTimeout调用的代码运行在与所在函数完全分离的执行环境上。这会导致这些代码中包含的 this 关键字会指向 window (或全局)对象。

四、使用箭头函数的好处

1.解决了匿名函数的this指向问题

上面例子打印结果为undefined,是因为此时this指向的是window对象,然而window对象上面并没有绑定name和age属性,所以找不到

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

(待补充)

箭头函数以及this指向问题的更多相关文章

  1. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  2. 箭头函数的this指向

    es6的箭头函数中this指向是跟普通function中的this指向不同的,普通function的this指向取决于调用function的对象, 而箭头函数的this指向取决于声明它的对象,看下面这 ...

  3. 箭头函数的this指向问题-一看就懂

    OK,对于箭头函数的this 用一句话概括:箭头函数中的this指向的是定义时的this,而不是执行时的this. 如果上面这句话听的是懂非懂或者完全不懂的,没关系,下面会有案例讲解. 举个栗子 来看 ...

  4. ES6箭头函数及this指向

    箭头函数(=>):函数简写 无参数:() => {} 单个参数:x => {} 多个参数:(x, y) => {} 解构参数:({x, y}) => {} 嵌套使用:部署 ...

  5. 箭头函数的this指向问题

    this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this,所以也就不能用作构造函数 ...

  6. ES6箭头函数与this指向

    一.ES6箭头函数 ES6之前的语法想要定义一个函数,如图example1,ES6之后定义一个函数如图example2,相比较之下简洁了很多 二.函数的this指向 非箭头函数,谁调用函数this指向 ...

  7. ES6——>let,箭头函数,this指向小记

    let let允许你声明一个作用域被限制在块级中的变量.语句或者表达式. 还是那个经典的问题:创建5个li,点击不同的li能够打印出当前li的序号. 如果在for循环中使用**var**来声明变量i的 ...

  8. 关于箭头函数的this指向问题

    document.onclick = function(){ // 普通函数的this是在运行的时候才临时绑定的,也就是说,函数不运行,你绝对不可能知道this是谁 // 下面这个函数如果是自调用,t ...

  9. 箭头函数this的指向

    箭头函数的this 什么是箭头函数,箭头函数是es6的新特性,其出现就是为了更好的表示(代替)回调函数 // 箭头函数 (arg1, arg2) => {} // 当箭头函数只有一个参数 arg ...

随机推荐

  1. 用redlock实现redis的分布式锁

    本文是一个demo,利用多进程,来模拟使用redis分布式锁的使用场景.本机需要安装redis,python3.7下运行代码.分布式锁用redlock这个包实现,实现步骤分三步: 实例化锁:rlock ...

  2. web服务器、WSGI跟Flask(等框架)之间的关系

    之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 HTT ...

  3. HDU6702 ^&^(思维)

    HDU6702 ^&^ 目标为 \((A \oplus C) \& (B \oplus C) = 0\) ,易得: \(A \& B=0\) 时:\(C = 1\) . \(A ...

  4. Ceiling analysis

    Course note: Coursera Machine learning by Andrew Ng, 2014, week 10: Application example: photo OCR ( ...

  5. JS-生成器函数(function 星号)的暂停和恢复(yield)

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/function* https://devel ...

  6. 【Visual Studio】 使用EF、 Linq2Sql快速创建数据交互层(一)

    项目伊始,创建数据库交互层代码是底层框架的首要任务.常用的做法包括手动编码.Hibernate或者动软之类的代码生成器,而多数人忽略了.Net环境下VS提供的两套非常好用的数据层工具. EF和Linq ...

  7. 【python】 判断纯ascii串

    参考:http://stackoverflow.com/questions/3636928/test-if-a-python-string-is-printable print all(ord(c)& ...

  8. < 备考CET6 - 替换词 >

    替换词 名词 结果 Result consequence 人 People, person citizen, individual 发展 Development advancement,progres ...

  9. 标准标签库JSTL(JSP Standard Tag Library)

    1, 核心标签(最常用, 最重要的) 表达式控制标签 out 输出常量 value---直接赋值 输出变量 default---默认值 escapeXml---控制转义字符(默认为true, 如果需要 ...

  10. 自定义SAP搜索帮助记录-代码实现

    一般来说,标准的字段都可以用SE11来创建搜索帮助,但是有时候这里的满足不了需求或者,相同的数据元素需要用不同的搜索帮助类型,就需要用别的方式实现 1.用函数:F4IF_INT_TABLE_VALUE ...