JavaScript函数不会停止执行

时间:2017-04-06 16:21:32

标签: javascript return

我已经确认在某些时候第一个if条件为真。函数不应该返回true并停止执行吗?然而;在这种情况下,即使在第一个if条件为真之后,该函数仍继续执行,直到forEach循环结束,然后每次退出返回false。有人能告诉我错误在哪里吗?

function checkValid(id){
    pressedButtons.forEach(button => {
        console.log(`ID: ${id} and Button: ${button}`)
        if (id == button+1 || id == button+8 || id == button-1 || id == button-8){
            console.log("IM HERE")
            return true
        }
    })
    return false
}

2 个答案:

答案 0 :(得分:0)

问题似乎是function scoping/closures

我添加了一个“isValid”变量,它将在整个forEach函数中保持“有效性”。 button => {}是一个函数,它有自己的范围,可以在每个pressedButtons上运行。 return true仅从作用域函数返回,而不是checkValid函数。

function checkValid(id){
    var isValid = false;
    pressedButtons.forEach(button => {
        console.log(`ID: ${id} and Button: ${button}`)
        if (id == button+1 || id == button+8 || id == button-1 || id == button-8){
            console.log("IM HERE")
            isValid = true;
        }
    })
    return isValid;
}

答案 1 :(得分:0)

你可以在此使用Promise来停止前进的foreach循环。

function checkValid(id){
   var promises= [];
   pressedButtons.forEach(button => {
    return new Promise(function(resolve, reject){
      console.log(`ID: ${id} and Button: ${button}`)
       if (id == button+1 || id == button+8 || id == button-1 || id == button-8){
        console.log("IM HERE")
        resolve(true);
      }
    });
  });
  Promise.race(promises).then(function(result){
    // as soon as any promise resolves it will fall here
  });

}