Code A:

const isPresent = (ele, arr) => {
  arr.forEach(e => {
    if (ele === e) {
      console.log("will return true")
      return true
    }
  })
  console.log("will return false")
  return false
}

Code B:

const isPresent = (ele, arr) => {
    console.log("arr:", arr)
    console.log(ele)
    if (arr.indexOf(ele) !== -1) return true
    return false
  }

实际情况中,A段代码到达return true后并不会停止,而是会接着运行下去return false.

想了一下,可能是因为每遍forEach都算一个小函数,所以只return true了单次循环的小函数,而不是return了isPresent函数。

改为B段代码后问题解决。

另外:以前还遇到过更棘手的情况,如何从最底层循环直接跳出多层(例如:直接返回至最上层)呢?如果不用goto的话还没想到有什么好办法。要是抛出异常然后catch的话感觉还不如goto...


I am a noob