Javascript矢印関数とlambada


()=>{}基本的な特徴
SE 6の矢印関数は、実際の開発においては比較的便利です.通常はいくつかの特徴があります.
  • 矢印関数のthisは、外部作用領域
  • に結合される.
  • アーgments
  • がありません.
  • 対象に戻りたいなら、小包を入れてください.
  • callとappyはthis
  • に入ることができません.
    (() => {a: 1})() //    undefiend,     ,       
    (() => ({a: 1})()
    矢印関数とスランダ表現
    lambadaは、コンピュータ科学に匿名関数を示しており、本質的には動作を簡略化するために用いられている.簡単に言えば、入力と出力を表す方法です.
    ステップ1:
    平方演算表現(x*x):数式(λ表式の入力を表します.
    λx.x * x
    JavaScriptで実現:
    (function (x) {
      return x * x;
    })()
    ステップ2:
    平方に2(x*x+2)を追加します.数学式:
    (λx.x * x)(λx.x + 2)
    Javascriptで実現する:
    (function(x) {
      return x + x
    })((function () {
      return x * x
    })())
    実は匿名関数を利用してから、入れ子を続けます.しかし、矢印関数があれば、上記の操作をより簡単に行うことができます.
    (x => x + 2)((x => x * x)())
    ステップ3:
    より優雅に実現するには、上記のような方法は、特に優雅ではなく、可読性が良くなく、より優雅になる方法が必要である.
    前の出力は後の関数として入力されますが、どうやって実現すればいいですか?Javascriptでは、reduceという方法を提供しています.
    const action = [
      x => x * x,
      x => x + 2
    ];
    
    let res = action.reduce((res, cur) => cur(res), 2);
    ステップ4:
    総括:上の過程から見られます.二つの主要な鍵となる過程があります.
  • 、矢印関数は匿名関数であり、書き込みを簡略化する
  • .
  • 、矢印関数が変数としてreduce関数に伝達されるコールバック
  • したがって、矢印関数は、関数的な動作を大幅に簡略化する.実はlambada表現は、Javascriptでは匿名関数です.
    矢印関数の概要:
  • 矢印関数は、map、filter、reduceなどの純関数の動作に適しています.
  • 矢印関数の内部では、一般的にはthisを使用しないでください.
    問題1:
    function A() {
      this.foo = 1
    }
    
    A.prototype.bar = () => console.log(this.foo)
    
    let a = new A()
    a.bar()  //undefined
    対象aは、作用域を構成していないからである.
    もしthisがAを指したいなら、こう書いてもいいです.
    function A() {
      this.foo = 1;
      this.bar = () => {
        console.log('value', this.foo);
      }
    }
    let a = new A();
    a.bar(); //1
    barの声明は関数Aの作用域内部にあるからです.
    問題2:
    const A = {
      foo: 1,
      bar: () => {
        console.log('value', this.foo);
      }
    }
    let a = Object.create(A);
    a.bar(); //undefined
    正常な値を出力したいなら、functionで定義するべきです.
    const A = {
      foo: 1,
      bar: function (){
        console.log('value', this.foo);
      }
    }
    let a = Object.create(A);
    a.bar(); // value 1
    参考文献:
    lamdaと矢印関数