React ES6 箭头函数

箭头函数

箭头函数允许我们编写更短的函数语法:

一般语法:
  1. hello = function() { return "Hello World!";}
使用箭头函数:
  1. hello = () => { return "Hello World!";}

它变短了!如果函数只有一条语句,并且该语句返回一个值,则可以删除括号 和 return关键字:

默认情况下,箭头函数返回值:
  1. hello = () => "Hello World!";
注意:仅当函数只有一条语句时,此操作才有效。

如果有参数,则将其传递到括号内:

带参数的 Arrow 函数:
  1. hello = (val) => "Hello " + val;

事实上,如果只有一个参数,也可以跳过括号:

无括号的箭头函数:
  1. hello = val => "Hello " + val;

关于 this 关键字

与常规函数相比,箭头函数中的处理方式也有所不同。

简言之,对于箭头函数没有 this 的绑定。

在常规函数中,this 关键字表示调用函数的对象,可以是窗口、文档、按钮或其他任何对象。

使用箭头函数时,this 关键字 始终 表示定义箭头函数的对象。

让我们看两个例子来理解其中的区别。

这两个示例都调用了一个方法两次,第一次是在页面加载时,第二次是在用户单击按钮时。

第一个示例使用常规函数,第二个示例使用箭头函数。

结果显示,第一个示例返回两个不同的对象(窗口和按钮),第二个示例返回 Header 对象两次。

实例

使用常规函数, this 表示调用函数的对象:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>常规函数</h2>
  5. <p><strong>this</strong> 关键字表示不同的对象,具体取决于函数的调用方式。</p>
  6. <button id="btn">点击这里!</button>
  7. <p><strong>this</strong> 表示:</p>
  8. <p id="demo"></p>
  9. <p>查看单击按钮前后的差异。</p>
  10. <script>
  11. class Header {
  12. constructor() {
  13. this.color = "Red";
  14. }
  15. changeColor = function() {
  16. document.getElementById("demo").innerHTML += this;
  17. }
  18. }
  19. const myheader = new Header();
  20. window.addEventListener("load", myheader.changeColor);
  21. document.getElementById("btn").addEventListener("click", myheader.changeColor);
  22. </script>
  23. </body>
  24. </html>
实例

使用箭头函数, this 表示 Header 对象,无论是谁调用函数:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>箭头函数</h2>
  5. <p><strong>this</strong> 关键字表示 Header 对象。</p>
  6. <button id="btn">点击这里!</button>
  7. <p><strong>this</strong> 表示:</p>
  8. <p id="demo"></p>
  9. <script>
  10. class Header {
  11. constructor() {
  12. this.color = "Red";
  13. }
  14. changeColor = () => {
  15. document.getElementById("demo").innerHTML += this;
  16. }
  17. }
  18. const myheader = new Header();
  19. window.addEventListener("load", myheader.changeColor);
  20. document.getElementById("btn").addEventListener("click", myheader.changeColor);
  21. </script>
  22. </body>
  23. </html>

在使用函数时,请记住这些差异。有时,正则函数的行为是您想要的,如果不是,请使用箭头函数。

分类导航