JS 函数的奇怪行为 "every()"

Weird behavior of JS function "every()"

拜托,谁能解释一下函数 every.

的行为

我有一个数组,我想对它应用函数 every。函数 every 使用谓词。

我的简单谓词:

function test() {
  return function(arg) {
    console.log(arg);
    
    return true;
  }
}

我用我的谓词在数组上调用函数 every:

const predicate = test();

[1, 2, 3].every(predicate);

结果:

Output:

1
2
3

但是当我将谓词更改为:

function test() {
  return function(...args) {
    console.log(...args);
    
    return true;
  }
}

结果对我来说很奇怪:

Output:

1 0 [ 1, 2, 3 ] 
2 1 [ 1, 2, 3 ]
3 2 [ 1, 2, 3 ]

为什么会这样?我期待这样的事情:

[1]
[2]
[3]

function test() {
  return function(arg) {
    console.log(arg);
    
    return true;
  }
}

function test2() {
  return function(...args) {
    console.log(...args);
    
    return true;
  }
}

const predicate = test();
const predicate2 = test2();
[1, 2, 3].every(predicate);
[1, 2, 3].every(predicate2);

every() 与 map() 和 forEach() 一样,调用带有两个参数的函数:value 和 index。

...arg 就像传递 .every 方法接受的所有参数。

即数组 elementindex of the elementwhole array.

因此,将值打印为数组。您可以简单地 return 方括号中的值。

演示 :

[1, 2, 3].every(function(arg) {
  console.log([arg]);
  return true;
});