JS:作为参数传递给方法的函数从哪里获得参数?

问题描述

我突出显示了我不知道其值来自何处的参数。数组不应该通过吗?这个不成立。一切都倒退了。数组值如何进入ages.some(checkAdult)调用中?点之前的关键字是否会成为我想象的checkAdult之后的括号中的参数? 为什么不去some(checkAdult(ages))? 为什么将它附加到带点的东西的末尾?

var ages = [3,10,18,20];

function checkAdult(age) { // THIS LINE HERE,how does it link to the array???
  return age >= 18;
}

function myFunction() {
  document.getElementById("demo").innerHTML = ages.some(checkAdult);
}
<p>Click the button to check if any of the elements in the array has a value of 18 or more.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

解决方法

通常(但并非总是),用户提供的功能由高阶功能调用。

在下面的示例some中,使用f的每个元素调用t,直到找到第一个真实结果。否则,将返回错误结果。

const some = (f,t) =>
  t.length === 0
    ? false
    : Boolean(f(t[0])) // f gets called by some
      || some(f,t.slice(1))

console.log(some(v => v > 30,[ 10,20,30,40 ]))
// true

console.log(some(v => v > 99,40 ]))
// false

或同一程序的迭代版本-

function some (f,t)
{ for (const v of t)
    if (Boolean(f(v)))
      return true
  return false
}

console.log(some(v => v > 30,40 ]))
// false