javascript中有这样一个例子:
var fruits = ['apple', 'banana', 'orange', 'grapes', 'pear', 'passionfruit'];
// The three values on the callback function are:
// element - The element being traversed
// index - The current index of the item in the array starting at 0
// array - The array being traversed (probably mostly irrelevant)
fruits.forEach(function(element, index, array) {
console.log(index, element);
});
forEach一个函数被传递给方法。我知道在方法的forEach某处调用了这个传递的函数。要调用它,您需要向它传递 3 个参数(最好)。为这个函数编写代码的人以某种方式迭代数组的元素fruits并调用我的callback函数,将所有这三个参数传递给它。他们怎么知道什么在哪里?毕竟,其实我不会写
function(element, index,array)
一个
function(myelement, myindex,myarray)
那些。更改参数的名称,它仍然有效。事实证明,传递给函数的元素被“绑定”到参数的位置——连续 1、2、3。所以?或者我哪里错了。请告诉我?
我将单独发布问题:
传递给回调函数的参数是否“绑定”到参数的位置?
传递给函数的参数实际上是一个数组
arguments[]。您认为订单很重要的假设是正确的。JavaScript 魔法:参数(Habr)。
一切都很简单——他们不知道作为回调传递的函数是如何描述的。
他们只是接受它并通过向它传递参数来调用它:element、index、sourse_array。
此外,回调可以在函数内部有一个上下文(这个值)。
由于forEach的开发人员不知道要传递给他们什么函数,他们只是简单地调用以下形式的任何回调
通过另外设置this,这相当于调用call
同时,回调函数本身可以声明为三个参数、两个、四个、完全不带任何参数等。
帮助中对 forEach 的更多描述
您可以随意命名参数,例如
此外,所有参数都是可选的(尽管没有第一个元素的 forEach 是没有意义的)
可以在此处阅读更多详细信息。在最后的同一个地方有一个函数实现的例子
forEach()