【问题标题】:How do the arguments of callback functions work?回调函数的参数如何工作?
【发布时间】:2021-05-13 09:15:56
【问题描述】:

我刚开始使用 javascript,我无法真正理解回调函数的工作原理。这听起来可能很愚蠢,但我有一些问题。不合适我就删了。

如果回调函数是作为参数传递给另一个函数的函数,那么回调函数的参数会发生什么变化?

使用回调函数是否会执行两次(一次作为参数使用,另一次在声明时)?

另外,我无法理解在回调函数参数下方附加的照片中如何获取数组中元素的值。

【问题讨论】:

标签: javascript arrays asynchronous callback


【解决方案1】:

以您的 sn-p 为例,我们看到 logPerson 是一个函数。我们还使用Array.prototype.forEach 循环遍历people 的数组。

现在 forEach 将一个函数作为参数,它使用参数作为每次迭代的项值和索引来调用该函数。

因此,当我们将logPerson 作为参数传递给forEach 时,会使用forEach 传递给其回调的参数调用此函数

forEach 的简单实现可能是这样的

Array.prototype.forEach = function(callback) {
    const arr = this;
    for(let i = 0; i < arr.length; i++) {
        callback(arr[i], i);
    }
}

编写示例的另一种方法是

let people = ["mario", "luigi", "rui"];

people.forEach((person, index) => {
   console.log(`${index} - hello ${person}`);
})

【讨论】:

  • 那么 forEach 总是为每次迭代传递值和索引? Javascript 是如何知道将值放入 person 变量中,将索引放入 index 变量中的?
  • @L4M3 它没有。它只是将数组中的值作为第一个参数传递,将索引作为第二个参数传递。这些参数的名称由您决定。你可以将它们命名为foobar,你会得到相同的值。
  • 哦,好的,我明白了。如果我想跳过该值并仅获取索引,那将如何工作?最后一个问题,回调函数会在声明时阻止它执行吗?对不起,如果它令人讨厌。
  • @L4M3 仅获取索引,您需要第二个参数。例如,只需声明两个而不使用第一个 (_, index) =&gt; { console.log(index) }_ 是命名您不想使用的参数的常用方法,但它可以是任何名称。如果您愿意,可以将其命名为 notGonnaUseThat。声明时永远不会调用函数。它们仅在......好吧,当某些代码显式调用它们时才被调用。 fn = () =&gt; console.log("hello") 只是创建了一个名为 fn 的函数。但你需要 fn()fn.call()fn.apply() 或其他任何名称。
  • 谢谢,你不知道这有多大帮助。我实际上考虑放弃 javascript 认为它对我来说太复杂了。不过我会继续前进的。
猜你喜欢
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2014-12-29
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多