1. 箭头函数感性认识
  2.  
  3. 箭头函数 是在es6 中添加的一种规范
  4.  
  5. x => x * x 相当于 function(x){return x*x}
  6.  
  7. 箭头函数相当于 匿名函数, 简化了函数的定义。 语言的发展都是倾向于简洁 对人类友好的, 减轻工作量的。 就相当于我最钟情的python, 有很多类似之处, 关于promise 文章中我会和Python 框架中的tornado 中的异步进行对比的, 很相似。
  8.  
  9. 箭头函数有两种格式, 一种只包含一个表达式,没有{…} return 一种包含多条语句, 这个时候{} return 就不能省略
  10.  
  11. x => {
  12. if (x>0){
  13. return x*x
  14. }else{
  15. return x
  16. }
  17. }
  18.  
  19. 如果有多个参数就要用():
  20.  
  21. // 两个参数返回后面的值
  22. (x, y) =>x*y + y*y
  23. //没有参数
  24. () => 999
  25. // 可变参数
  26. (x, y, ...rest) =>{
  27. var i,sum = x+y;
  28. for (i=0;i<rest.length;i++){
  29. sum += rest[i];
  30. }
  31. return sum;
  32. }
  33.  
  34. 如果要返回一个单对象, 就要注意, 如果是单表达式, 上面一种会报错, 要下面这种
  35.  
  36. // 这样写会出错
  37. x => {foo:x} // 这和函数体{}有冲突
  38. // 写成这种
  39. x => {{foo:x}}
  40.  
  41. 箭头函数中this 指向
  42.  
  43. 箭头函数 看起来是匿名函数的简写。但是还是有不一样的地方。 箭头函数中的this是词法作用域, 由上写文确定
  44.  
  45. var obj = {
  46. birth: 1990,
  47. getAge: function () {
  48. var b = this.birth; //
  49. var fn = function () {
  50. return new Date().getFullYear() - this.birth; // this指向window或undefined
  51. };
  52. return fn();
  53. }
  54. };
  55.  
  56. 箭头函数修复了this的指向, this 总是指向词法作用域, 也就是外层调用者obj:
  57.  
  58. var obj = {
  59. birth: 1990,
  60. getAge: function () {
  61. var b = this.birth; //
  62. var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
  63. return fn();
  64. }
  65. };
  66. obj.getAge(); //
  67.  
  68. 如果使用箭头函数,以前的那种hack写法 就不需要了:
  69. var that = this;
  70.  
  71. 由于this 在箭头函数中已经按照词法作用域绑定了, 所以施一公call 或者apply() 调用函数的时候, 无法对this 进行绑定, 传入的第一个参数被忽略:
  72.  
  73. var obj={
  74. birth:2018,
  75. getAge:function(year){
  76. var b =this.birth;//
  77. var fn = (y)=>y-this.birth //this.birth 仍然是2018
  78. return fn.call({birth:200},year)
  79. }
  80. }
  81. obj.getAge(2020)
  82.  
  83. 下面对比写es5 es6 直接关于箭头函数的对比使用
  84.  
  85. //es5
  86. var fn = function(a, b){return a+b}
  87. //es6 直接被return时候可以省略函数体的括号
  88. const fn=(a,b) => a+b;
  89.  
  90. //es5
  91. var foo = function(){
  92. var a=20;
  93. var b= 30;
  94. return a+b;
  95. }
  96. //es6
  97. const foo=()=>{
  98. const a= 20;
  99. const b=30;
  100. return a+b
  101. }
  102.  
  103. // 注意这里 箭头函数可以替代函数表达式但是不能替代函数声明
  104.  
  105. 再回到this 上面来,箭头函数样意义上面来说没有this. 如果使用了this 那么就一定是外层this .不会自动指向window对象。所以也就不能使用call/apply/bind来改变this指向
  106.  
  107. var person = {
  108. name: 'tom',
  109. getName: function() {
  110. return this.name;
  111. }
  112. }
  113.  
  114. 使用es6 来重构上面的对象
  115. const person = {
  116. name:'tom',
  117. getName:()=>this.name
  118. }
  119. 这样编译的结果就是
  120. var person ={
  121. name:'tom',
  122. getName:function getName(){return undefined.name}
  123. }
  124.  
  125. ES6中,会默认采用严格模式,因此this也不会自动指向window对象了,而箭头函数本身并没有this,因此this就只能是undefined,这一点,在使用的时候,一定要慎重慎重再慎重,不然踩了坑你都不知道自己错在哪!这种情况,如果你还想用this,就不要用使用箭头函数的写法。
  126.  
  127. // 可以稍做改动
  128. const person = {
  129. name: 'tom',
  130. getName: function() {
  131. return setTimeout(() => this.name, 1000);
  132. }
  133. }
  134.  
  135. // 编译之后变成
  136. var person = {
  137. name: 'tom',
  138. getName: function getName() {
  139. var _this = this; // 使用了我们在es5时常用的方式保存this引用
  140.  
  141. return setTimeout(function () {
  142. return _this.name;
  143. }, 1000);
  144. }
  145. };

=> js 中箭头函数使用总结的更多相关文章

  1. js中箭头函数和普通函数this的区别

    最近在学习angularJs的时候由于里面涉及到了箭头函数,箭头函数除了声明上有点区别以外,和普通函数最主要的区别还是在this的问题上. Js中函数中嵌套的函数this不会 “继承”.比如说以下代码 ...

  2. js中箭头函数 及 针对箭头函数this指向问题引出的单体模式

    ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭头函数不需要参数或需要多个参数, ...

  3. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  4. js中的函数,Date对象,Math对象和数组对象

    函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. ...

  5. js中getByClass()函数

    js中getByClass()函数进化史 对于js来说,我想每一个刚接触它的人都应该会抱怨:为什么没有一个通过class来获取元素的方法.尽管现在高版本的浏览器已经支持getElementsByCla ...

  6. JS中的函数、Bom、DOM及JS事件

    本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的 ...

  7. node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了

    最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...

  8. JS中的函数、BOM和DOM操作

     一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */   // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...

  9. html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结

    Day27  html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...

随机推荐

  1. deepin安装Python3.6和pip

    1.安装python3.6 sudo apt-get install python3.6 2.修改软连接 sudo ln -s /usr/local/bin/python3.6 /usr/bin/py ...

  2. centos6安装多实例mysql

    centos 6.5,使用二进制安装多实例mysql 5.5.60 所需安装包mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz.ncurses-devel-5.7- ...

  3. gdb远程debug A syntax error in expression, near `variable)'.

    今天调试有个linux环境的应用时,gdb提示A syntax error in expression, near `variable)'.,最后经查,gdb版本过低(比如7.2)或者源代码不匹配所致 ...

  4. 2018-2019-1 20189206 《Linux内核原理与分析》第四周作业

    linux内核分析学习笔记 --第三章 MenuOS的构造 计算机的"三大法宝"和操作系统的"两把宝剑" 三大法宝 程序存储计算机 即冯诺依曼体系结构,基本上是 ...

  5. QT笔记之内存管理

    转载:https://blog.csdn.net/myjqc/article/details/8569196 (链接错误解决办法) 我们都知道在C++中,new和delete是成对出现的,那么在QT中 ...

  6. 枚举+排序|神奇算式|2014年蓝桥杯A组题解析第三题-fishers

    标题:神奇算式 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求. ...

  7. (zhuan) Notes on Representation Learning

    this blog from: https://opendatascience.com/blog/notes-on-representation-learning-1/   Notes on Repr ...

  8. 【转载】RabbitMQ基础知识

    本文转自: https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message ...

  9. Xilinx_ISE 14.7 Win10 闪退

    打开D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64 将libPortabilityNOSH.dll 重命名为libPortability.dll,替换原libPortabilit ...

  10. 前端面试题 | JS部分(附带答案)

    目前在找工作,所以各方收集了一堆面试题.其实刷面试题的过程也能更新自己对知识的认识,所以也提醒自己多看多理解.如果对下面题目有更深理解,会实时更新.遇到新题目,也会不定时更新.希望能帮助到部分朋友- ...