gpt4 book ai didi

javascript - 请有人解释一下 eloquent 中这个示例的绑定(bind)函数的工作原理

转载 作者:行者123 更新时间:2023-12-03 04:51:13 31 4
gpt4 key购买 nike

isInSet 需要两个参数,但 binds 仅传递 theSet 作为第一个参数。我无法弄清楚在这种情况下绑定(bind)方法是如何工作的

function isInSet(set , person) {
return set.indexOf(person.name) > -1;//checks for existence of person.name in theSet
}
console.log(ancestry .filter(function(person) {
return isInSet( theSet , person) ;
}) ) ;
// ! [{ name : " Maria van B r u s s e l " , ...} ,
// { name : " Carel H a v e r b e k e " , ...}]
console.log(ancestry.filter(isInSet.bind(null, theSet))) ;//**how does this work?**
// !... same result

最佳答案

bind() 从调用它的函数创建一个新函数。它将新创建的函数中的 this 关键字设置为您传递给它的第一个参数(如果传递了 null,则它不会覆盖默认的 this 关键字)。您还可以向 bind() 传递额外的参数,如果这样做,它们将始终被插入到新函数中。举例来说,假设您有一个带有 2 个参数的 sum 函数。

function sum (a, b) {
return a + b;
}

现在我们可以使用 bind() 创建一个新函数,并始终传入一个参数。

var boundSum = sum.bind(null, 2);

这将始终将 2 绑定(bind)为 sum() 函数中的第一个参数。现在,无论何时您调用 boundSum() 函数,它都只会采用一个参数,因为 2 已经绑定(bind)了。

boundSum(3); // <-- this would return 5

您的示例使用了类似的原理。因为您正在调用 isInSet.bind(null, theSet),所以它始终将 theSet 绑定(bind)到 isInSet 函数中传递的第一个参数。然而,它仍然缺少第二个参数。它之所以有效,是因为您将其放入 ancestry.filter() 函数中。 filter() 本质上是循环遍历数组并将每个元素传递给其中的函数 ( check the docs )。因此,ancestry 数组中的每个元素都会传递给该绑定(bind)函数,这使其成为 isInSet() 的第二个参数。

关于javascript - 请有人解释一下 eloquent 中这个示例的绑定(bind)函数的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42653910/

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