this问题

箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域,谁定义的函数,this指向谁

箭头函数要实现类似纯函数的效果,必须剔除外部状态。所以箭头函数不具备普通函数里常见的 this、arguments 等,当然也就不能用 call()、apply()、bind() 去改变 this 的指向

对于箭头函数来说,并没有自己的 this ,它的 this 将始终指向让它生效的对象,即它的外部调用者:

const obj1 = {
arrowFunc: () => { console.log(this) },
normalFunc: function () { console.log(this) }
} // obj1.arrowFunc 在全局对象 window 下生效,指向 window
obj1.arrowFunc() // window
// 普通方式声明的函数 this 指向持有这个函数的对象,即 obj1
obj1.normalFunc() // obj1

  

const obj2 = {
arrowFunc: function () {
setTimeout(() => { console.log(this) }, 0)
},
normalFunc: function () {
setTimeout(function () { console.log(this) }, 0)
}
} // arrowFunc 中的箭头函数在 obj2 下生效,指向 obj2
obj2.arrowFunc() // obj2
// normalFunc 中的匿名函数的 this 始终指向 window
obj2.normalFunc() // window

  

arguments 关键字

在函数中,可以通过 arguments 关键字来获取到当前函数中传入的参数,但是在箭头函数中是没有这个关键字的,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

箭头函数转成 ES5 的代码如下

// ES6
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
} // ES5
function foo() {
var _this = this; setTimeout(function () {
console.log('id:', _this.id);
}, 100);
}

  

es6使用箭头函数需要注意的问题的更多相关文章

  1. ES6中箭头函数的作用

    我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...

  2. Es6中箭头函数与普通函数的区别

    Es6中箭头函数与普通函数的区别? 普通function的声明在变量提升中是最高的,箭头函数没有函数提升 箭头函数没有属于自己的this,arguments 箭头函数不能作为构造函数,不能被new,没 ...

  3. es6的箭头函数和es5的function函数区别

    一.es6的箭头函数es6箭头函数内部没有this,使用时会上朔寻找最近的this不可以做构造函数,不能使用new命令,因为没有this函数体内没有arguments,可以使用rest参数代替不能用y ...

  4. Es6 之箭头函数 初学

    不积跬步,无以至千里;不积小流,无以成江海! // ES5 var selected = allJobs.filter(function (job) { return job.isSelected() ...

  5. 关于es6的箭头函数使用与内部this指向

    特型介绍:箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. 'use strcit'; let arr = [1,2,3]; //ES5 let es5 = arr.m ...

  6. ES6笔记② 箭头函数

    特性介绍 箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. //ES5 function fun(x,y){ return x+y; } console.log(fun ...

  7. 关于ES6 用箭头函数后的 this 指向问题

    最近写完小程序后, 开始学习React, 因为有编译器, 就直接用ES6 新语法了, 中间自然离不开  () => { console.log('箭头函数的this是指向哪的问题')}; var ...

  8. 进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题

    首先复习下普通函数里的this指向: function test(){ console.log(this) } test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数  函数 ...

  9. es6之箭头函数

    => 箭头函数是ES6增加的函数表达式.将function关键字和函数名都删掉,并使用“=>”连接参数列表和函数体(低版本浏览器不支持) 箭头函数看上去只是语法的变动,其实也影响了this ...

  10. ES6学习--箭头函数

    1. 箭头函数基本形式 let func = (num) => num; let func = () => num; let sum = (num1,num2) => num1 + ...

随机推荐

  1. Qt编译出现cc1plus.exe: out of memory allocating 65536 bytes问题

    今天编译Qt程序,出现这个问题: cc1plus.exe: out of memory allocating 65536 bytes 这个还没有遇到过,上网查了下.问题原因是资源文件过大. qt的资源 ...

  2. 009_go语言中的slices分片

    代码演示 package main import "fmt" func main() { s := make([]string, 3) fmt.Println("emp: ...

  3. 眼见为实 — CSS的overflow属性

    1. overflow属性 CSS的overflow属性指定当内容溢出一个元素的框,会发生什么.举个栗子: <!DOCTYPE html> <html> <head> ...

  4. Kubernetes Pod OOM 排查日记

    一.发现问题 在一次系统上线后,我们发现某几个节点在长时间运行后会出现内存持续飙升的问题,导致的结果就是Kubernetes集群的这个节点会把所在的Pod进行驱逐OOM:如果调度到同样问题的节点上,也 ...

  5. DB2 SQL Error: SQLCODE=-1585, SQLSTATE=54048

    DB2 执行SQL报错: DB2 SQL Error: SQLCODE=-1585, SQLSTATE=54048 你建的db2数据库没有建足够大的临时表空间,新建一个足够大的临时表空间 1.创建数据 ...

  6. 2020-06-22:已知两个非负数的异或值为M,两数之和为N,求这两个数?

    福哥答案2020-06-22: 1.遍历法时间复杂度:O(N)最好空间复杂度:O(1)平均空间复杂度:O(sqrt(N))最坏空间复杂度:O(N)[0,N/2]依次遍历,符合条件的就是需要的结果. 2 ...

  7. C#LeetCode刷题之#58-最后一个单词的长度(Length of Last Word)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3927 访问. 给定一个仅包含大小写字母和空格 ' ' 的字符串, ...

  8. C# NPOI计算Execl里面的公式

    我这里分两种情况处理 1.Execl中表格中存在公式,我们通过公式获取数据 我们通过Npoi,获取列的属性: private static object GetValueType(ICell cell ...

  9. Mybatis-05-使用注解开发

    使用注解开发 1 面向接口编程 原因: 解耦.可扩展性.提高复用性 关于接口的理解 定义与实现的分离 两类接口 一个个体的抽象,abstract class 一个个体某个方面的抽象,interface ...

  10. SpringBoot--- 使用SpringSecurity进行授权认证

    SpringBoot--- 使用SpringSecurity进行授权认证 前言 在未接触 SpringSecurity .Shiro 等安全认证框架之前,如果有页面权限需求需要满足,通常可以用拦截器, ...