gpt4 book ai didi

javascript - JavaScript 中的元素是如何传递到回调方法中的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:07 26 4
gpt4 key购买 nike

我目前正在学习 JavaScript,我对 Array.find() 方法的回调函数是如何工作的有点困惑,

我有这个当前代码:

const numbers= [43,46,33,23,44,36,5]

function under50(num) {
return num < 50;
}

val = numbers.find(under50);

根据 Mozilla 文档:

回调对数组中的每个值执行的函数,采用三个参数:

元素

数组中正在处理的当前元素。

索引

当前正在处理的元素在数组中的索引。

数组

调用了数组 find。

现在了解我传递元素的方法,然后对其进行迭代,一旦找到元素,它就会返回值。然而,让我感到困惑的是,当我从未显式地将方法传递给数组时,它是如何知道元素的?如果有人可以发布一个简单的示例,那将非常有帮助

最佳答案

为了扩展@GerardoFurtado 的评论,.find() 方法中this 的值被设置为您的数组。所以它既有数组又有回调函数。然后它基本上创建了一个典型的 for 循环的等价物,并在该循环中调用您的回调,传递每个成员。

举个简单的例子,自己制作.find()方法。

// Be careful extending native prototypes
Array.prototype.myFind = function(callback) {
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
return this[i]; // callback result was "truthy" so return this item
}
}

return undefined; // not found, so return undefined
}

const numbers = [43,46,33,23,44,36,5]

function under50(num) {
return num < 50;
}

const val = numbers.myFind(under50);

console.log(val);

这非常简单,并没有表现出与标准方法相同的所有行为,但足以说明如何使用 this 作为对调用该方法的对象的引用。

为了完整起见,您可能会问 JavaScript 如何知道您的数组具有名为 find 的属性(在本例中为方法)。显然,事实并非如此。但是JavasCript 会在原型(prototype)链中寻找find。看看:

const numbers= [43,46,33,23,44,36,5];
console.log("find" in numbers)

关于javascript - JavaScript 中的元素是如何传递到回调方法中的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com