如何将元素传递到JavaScript中的回调方法?

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)

  • CrazyTrain对你好,我刚刚编辑过它. (2认同)