代码之家  ›  专栏  ›  技术社区  ›  PacketSniffer

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

  •  4
  • PacketSniffer  · 技术社区  · 6 年前

    我目前正在学习JavaScript,对于 Array.find() 方法工程,

    我有当前代码:

    const numbers= [43,46,33,23,44,36,5]
    
    function under50(num) {
        return num < 50;
    }
    
    val = numbers.find(under50);
    

    根据Mozilla文档:

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

    要素

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

    指数

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

    大堆

    已调用数组查找。

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

    1 回复  |  直到 6 年前
        1
  •  5
  •   3 revs, 2 users 78%<br/>user2437417&#13;    6 年前

    要扩展@GerardoFurtado的评论,请 this 内部 .find() 方法设置为数组。因此它同时具有数组和回调函数。然后它基本上创建了一个 for 循环,并在该循环中调用回调,传递每个成员。

    举个简单的例子 .查找() 方法

    // 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);

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

    为了完整性,您可能会问JavaScript如何知道您的数组有一个名为 find .显然不是。但JavasCript会查找 发现 在原型链中。看看:

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