JavaScript 中的递归函数不会调用函数

0 javascript recursion

function and(arr) {
  if (arr.length === 0) {
    return true;
  }

  const head = arr[0];
  const tail = arr.slice(1);

  return head && and(tail);
}

and([true, true, false]);
Run Code Online (Sandbox Code Playgroud)

我有这个递归调用 4 次,最后

if (arr.length === 0) {
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

我以为它会以

但是,该函数只被调用了 3 次!!

head: [true]    tail: [true,false]
head: [true]    tail: [false]
head: [false]   tail: []
Run Code Online (Sandbox Code Playgroud)

这是我检查的结果

  if (arr.length === 0) {
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

这个条件甚至不起作用。

我需要帮助。

抱歉使用翻译器

Apl*_*123 5

在 Javascript 和许多其他语言中,&&是短路. 这意味着,如果您有a && f(),并且afalse,则条件已知为假,因此f永远不会运行。由于数组的头部false在第三次调用中,&&运算符将短路并返回 false 甚至不继续递归。如果您尝试,and([true, true, true])您会注意到它确实一直到长度为 0 的数组,并且您的条件执行某些操作。