一、定义函数的方式

//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. 【进阶技术】一篇文章搞掂:Spring Cloud Stream

    本文总结自官方文档http://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.0.RC3/single/spring-clou ...

  2. 屏幕分辨率测试工具(舍弃)---chrome开发者工具devTools(强烈建议系统学习)

    2019-01-25 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  3. save change is not permitted

    https://support.microsoft.com/en-my/help/956176/error-message-when-you-try-to-save-a-table-in-sql-se ...

  4. ImportError: libsybdb.so.5: cannot open shared object file: No such file or directory pymssql linux 问题解决 搭建驱动

    [root@hadoop1 nlp]# python sqlserver_t.py Traceback (most recent call last):  File "sqlserver_t ...

  5. Vagrant 手册之 box - 创建基础 box

    原文地址 有一种特殊的 box 被称为"base box".这些 box 包含 Vagrant 运作所需的最低限度,通常不是对现有的 Vagrant 环境("base b ...

  6. cts-verifier测试流程

    测试目的: cts的补充测试,可以理解为没法自动化的cts测试,这个是人工测试. 测试前提: 1.发货user版本 2.selinux:Enable 5.外网环境 设备需求: 2个待测设备:1个手机或 ...

  7. Leapin' Lizards [HDU - 2732]【网络流最大流】

    题目链接 网络流直接最大流就是了,只是要拆点小心一个点的流超出了原本的正常范围才是. #include <iostream> #include <cstdio> #includ ...

  8. 《JAVA设计模式》之状态模式(State)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...

  9. Windows下Nginx的启动、停止、重启等命令

    Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. 假设 ...

  10. JS对像和数组的遍历

    零. 通用遍历方法 0.1 for...in... let obj = {0:"a", 1:"b", 2:"c"}; for (let ke ...