【问题标题】:Arrow function syntax with assignment ES6带有赋值的箭头函数语法 ES6
【发布时间】:2018-01-08 09:51:28
【问题描述】:

快速提问,我是 es6 语法和打字稿的新手,我刚刚在我当前的 ng2 项目中找到了这段代码:

this.contextActions.getCurrentContextAction().subscribe((link) => this.currentAction = link);

如果我理解正确,请澄清一下。

函数 subscribe 将一个函数作为参数,该函数接受一个参数(链接)并将输入参数分配给当前操作,并返回此分配的结果?

我的理解正确吗? 这个箭头函数实际上返回的是什么?分配的结果? 分配没有返回任何正确的东西?

请告诉我。

谢谢

【问题讨论】:

    标签: javascript angularjs typescript ecmascript-6


    【解决方案1】:

    我的理解正确吗?这个箭头函数返回的实际上是什么?分配的结果?

    是的。根据调用它的代码对返回值的作用,它可能并不重要。

    分配没有返回任何正确的东西?

    它评估为分配的值。

    var bar, foo;
    foo = (bar = 1);
    console.log("Foo is " + foo);

    【讨论】:

    【解决方案2】:

    一个作业没有返回任何正确的东西?

    错了,赋值的值就是被赋值的值:

    var a;
    console.log(a = 5);

    这就是为什么你可以这样做:

    var a, b, c;
    console.log(a = b = c = 5); // all have the value 5

    所以箭头函数返回它的参数link。我不知道subscribe 函数是否对返回值做了什么。估计不是。

    你其余的理解是正确的。

    【讨论】:

      【解决方案3】:

      这实际上等同于:

      var _this = this;
      this.contextActions
        .getCurrentContextAction()
        .subscribe(function(link) { 
          return _this.currentAction = link
        });
      

      Subscribe 接受一个函数,该函数采用单个参数(链接),该参数将在特定阶段由 subscribe 内部调用。

      在这种情况下,链接是一个内部生成的变量,它被提供给您作为输入传入的函数。您也可以执行以下操作:

      function myFunction(link) { 
        return _this.currentAction = link
      }
      
      var _this = this;
      this.contextActions
        .getCurrentContextAction()
        .subscribe(myFunction);
      

      箭头函数会将给定回调的值分配给this.currentAction,然后在单个语句中返回值

      例如:

      var a, b, c;
      
      console.log(a = 5); // Logs out 5
      
      function test() {
        return b = 6;
      }
      
      c = test();
      console.log(b); // Logs out 6
      console.log(c); // Logs out 6
      

      【讨论】:

      • 有人在这里解释反对意见吗?这是唯一真正解释为什么箭头函数与普通函数不同的原因。它们没有上下文(this)或arguments 变量,它们的范围内固有,就像普通函数一样。
      【解决方案4】:

      测试这个的一个好方法是打开一个浏览器,看看它做了什么。让我们看看在控制台记录分配时 Chrome 开发工具中会发生什么。

      var someNum = 5;
      
      console.log(someNum = 20);
      

      20

      【讨论】:

        【解决方案5】:

        如果你不使用=>,它看起来像这样

        var _that = this;
        .subscribe(function(link){
           return _that.currentAction = link;
        }
        

        它返回分配的值。

        请参阅docs

        (param1, param2, ..., paramN) => { 语句 }
        (param1, param2, ..., paramN) => 表达式
        // 等价于: (param1, param2, ..., paramN) => { return expression; }

        // 只有一个参数名时,括号是可选的:
        (singleParam) => { 语句 }
        singleParam => { 语句 }

        【讨论】:

        • 不会。箭头函数和函数表达式得到不同的this 值。您还忽略了有关返回赋值表达式意味着什么的问题。
        • @Quentin 已修复。
        • 仍然没有解释return _that.currentAction = link的意义是什么。
        • @Quentin 它返回分配的值。还有什么需要解释的?
        • 没什么……但你的回答并没有这么说,这是问题的重点!
        猜你喜欢
        • 1970-01-01
        • 2019-12-17
        • 2016-12-22
        • 2016-08-06
        • 2017-10-14
        • 2018-06-15
        • 2019-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多