【问题标题】:Explain the example with a callback (fat arrow function) as a function argument使用回调(胖箭头函数)作为函数参数解释示例
【发布时间】:2019-06-03 21:17:24
【问题描述】:

我正在自己学习 Udemy 课程 ES6 Javascript: The Complete Developer's Guide Stephen Grider。前 4 部分的大部分内容都太简单了,所以我一直在做所有带有粗箭头函数的练习(这对我来说是新的,目前还没有在课程中涉及)以使其更有趣。

但是,当我到达Coding Exercise 8: Challenging! Implementing 'reject' 时,我不知道如何使用粗箭头函数来实现。

挑战在于创建一个名为“reject”的函数,它的工作方式与Array.filter 相反。从概念上讲,这很简单 - 只需使用 !

被难住了,我找到了一个使用胖箭头函数的建议解决方案。这里是:

const numbers = [10, 20, 30];

function reject(array, iteratorFunction) {
    return array.filter(arrItem => !iteratorFunction(arrItem))

}
reject(numbers, num => num > 15);

我不明白。有人可以解释这里发生了什么吗?另外,使用胖箭头函数有更好的实现吗?

【问题讨论】:

  • 你到底了解什么?
  • 您将作为第二个参数传递给拒绝抽象函数“num=>num

标签: javascript arrays filter ecmascript-6 arrow-functions


【解决方案1】:

要理解示例,需要熟悉和使用回调函数、匿名函数和箭头语法。

考虑代码:

function reject(array, iteratorFunction) {
    return array.filter(arrItem => !iteratorFunction(arrItem));
}

数组filter的定义:filter()方法创建了一个新数组,其中包含所有通过提供的回调函数实现的测试的元素。

什么是回调函数? 回调函数是作为参数传递给另一个函数的函数,然后在外部函数内部调用该函数以完成某种例程或动作。当函数及其主体(代码)在调用期间实际传递时,就会发生这种调用。

以下代码为回调函数:arrItem => !iteratorFunction(arrItem) 该函数返回一个布尔值。函数写成箭头语法。

这也可以写成:

function(arrItem) {
    return !iteratorFunction(arrItem);
}

iteratorFunction 也是一个回调函数,它返回一个布尔值。这 '!'运算符使返回的布尔值取反(将 true 变为 false,反之亦然)。

所以,下面的reject 函数代码的工作方式类似:

function reject(array, iteratorFunction) {
    return array.filter(function(arrItem) {
                            return !iteratorFunction(arrItem);
    });
}

-以下同上-

function reject(array, iteratorFunction) {

    let myCallback = function(arrItem) {
                         return !iteratorFunction(arrItem);
                     };

    return array.filter(myCallback);
}


iteratorFunction 是回调函数

在示例中,考虑以下代码:num => num > 15

代码是回调函数的箭头语法。这也可以写成:

function(num) {
    return num > 15;
}

这意味着代码:

let result = reject(numbers, num => num > 15);

-也可以写成-

let result = reject(numbers, function(num) {return num > 15});

-也可以写成-

let myCallback = function(num) {
    return num > 15;
}

let result = reject(numbers, myCallback);

结果是:[ 10 ]

【讨论】:

    【解决方案2】:

    num => num > 15 转换为以下匿名函数

    function(num){
      return num > 15
    }
    

    如果你只有一个参数,你不需要提供圆括号,如果你要返回一个表达式,你可以跳过花括号并写“return”

    一旦函数语法清晰,那么只需将函数作为参数传递给reject,并将数组的值作为参数提供给匿名函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2020-09-09
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多