用回调(胖箭头功能)作为函数参数来说明示例

时间:2019-01-09 06:29:45

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

我正在独自完成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);

我不明白。有人可以解释这是怎么回事吗?另外,使用胖箭头功能是否有更好的实现方式?

2 个答案:

答案 0 :(得分:2)

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

考虑代码:

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 ]

答案 1 :(得分:1)

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

function(num){
  return num > 15
}

如果只有一个参数,则无需提供圆括号;如果要返回表达式,则可以跳过花括号并输入“ return”

函数语法一目了然,那就是将函数作为参数拒绝并提供数组值作为匿名函数的参数。