【问题标题】:How this code works behind the scene?此代码如何在幕后工作?
【发布时间】:2019-01-24 15:48:11
【问题描述】:

我正在学习一些教程,并想出了以下代码,但我无法理解它是如何在幕后工作的。任何人都可以请解释它实际上是如何工作的。

所以我在这里做了一个函数ma​​pForEach

const arr1 = [1, 2, 3]
const mapForEach = (arr, fn) => {
    let newArr = []
    for (let i = 0; i < arr.length; i++) {
        newArr.push(
            fn(arr[i])
        )

    }
    return newArr;
}

现在我在这里制作了另外两个函数 CheckPastLimitCheckPastLimitSpecified。现在在这里 checkPastList 检查条件。到目前为止一切顺利。

const CheckPastLimit = (limiter, item) => {
    return item > limiter
}

现在这里 CheckPastLimit 用作参数和 arr2 返回值,通过 CheckPastLimit 条件(item > 限制器)。所以我想知道这条线是如何工作的?这条线在幕后是如何运作的?

const arr2 = mapForEach(arr1, CheckPastLimit.bind(this, 1))
console.log(arr2)

【问题讨论】:

  • 除非我错了,否则教程作者似乎不知道Array#map之类的基本功能,而是自己重新实现......
  • 您是否阅读过有关bind 工作原理的文档?这个问题可以有无穷无尽的答案。请询问您所面临的具体问题。
  • bindthis 的使用在这里没有意义 - const CheckPastLimitSimplified = limiter =&gt; item =&gt; item &gt; limiter 处理了两者,但仍然产生相同的结果。更好的是,将函数重命名为 greaterThan - 相关:stackoverflow.com/a/32787782

标签: javascript function functional-programming


【解决方案1】:

当我们在这里使用绑定时,我们实现currying

这意味着CheckPastLimit.bind(this, 1) 将返回带有第一个参数的新函数。

示例:

const multiply = (a, b) => a*b;
const multiplyByTwo = multiply.bind(this,2)
mltiplyBuTwo(5)// 5*2=10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2021-11-29
    • 2011-06-12
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多