Pac*_*fer 4 javascript arrays methods callback
我目前正在学习JavaScript,我对这个Array.find()方法的回调函数如何工作有点困惑,
我有这个当前的代码:
const numbers= [43,46,33,23,44,36,5]
function under50(num) {
return num < 50;
}
val = numbers.find(under50);
Run Code Online (Sandbox Code Playgroud)
根据Mozilla文档:
callback函数对数组中的每个值执行,取三个参数:
元件
当前元素在数组中处理.
指数
数组中正在处理的当前元素的索引.
排列
数组查找被调用.
现在要理解我传递元素的方法,然后迭代,然后一旦找到它的元素将返回值.然而,令我困惑的是,当我从未明确地传递过Array的方法时,它是如何知道元素的?如果有人可以发布一个简单的例子,那将非常有帮助
小智 5
要扩展@ GerardoFurtado的注释,方法this内部的值.find()将设置为您的数组.所以它有数组和回调函数.然后它基本上创建了一个典型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);Run Code Online (Sandbox Code Playgroud)
这是非常简化的,并没有表现出与标准方法相同的所有行为,但足以说明如何使用它this作为对调用该方法的对象的引用.
为了完整起见,您可能会问JavaScript如何知道您的数组有一个名为的属性(在本例中是一种方法)find.显然,它没有.但JavasCript将find在原型链中寻找.看一看:
const numbers= [43,46,33,23,44,36,5];
console.log("find" in numbers)Run Code Online (Sandbox Code Playgroud)