javascript循环遍历多个条件

标签 javascript

我正在尝试执行一个循环来执行代码并观察手机 alpha,然后转到特定页面,但我的循环仅适用于我的第一个和第二种情况 if,以及第一个 else if。

window.addEventListener("deviceorientation",findPlace);

for (var i = 0; i < count; i++) {
    findPlace();
}

function findPlace(evt) {

       if (evt.alpha < 90 || evt.alpha > 360) {
            unit.goToScreenAction(ctx, { screen: unit.find('Norte') }, noop);
            window.alpha = evt.alpha;
unit.find('alphatxt').setText(window.alpha + '');
        } 
        else if (evt.alpha < 180 || evt.alpha > 90) {
            unit.goToScreenAction(ctx, { screen: unit.find('Este') }, noop);
            window.alpha = evt.alpha;
unit.find('alphatxt3').setText(window.alpha + '');
        }
        else if (evt.alpha < 360 || evt.alpha > 270) {
            unit.goToScreenAction(ctx, { screen: unit.find('Sur') }, noop);
            window.alpha = evt.alpha;
unit.find('alphatxt1').setText(window.alpha + '');
        } 

        else if (evt.alpha < 270 || evt.alpha > 180) {
            unit.goToScreenAction(ctx, { screen: unit.find('Oeste') }, noop);
                        window.alpha = evt.alpha;
unit.find('alphatxt2').setText(window.alpha + '');
        }  
        else {
            unit.goToScreenAction(ctx, { screen: unit.find('Nada') }, noop);
        }
}

最佳答案

您正在混契约(Contract)步和异步代码。

当您附加 deviceorientation 事件处理程序时,它是同步的。 for 循环紧随其后同步执行。

deviceorientation 事件被触发时,您的 findPlace 函数将被异步调用。换句话说,您的脚本不会进行调用。浏览器可以。

问题是,您还在 for 循环中同步调用 findPlace。并且您的 count 变量未定义。

您可能会感到困惑,因为有时在其他语言(例如 Java 或 C++)的基于事件的框架中使用术语“事件循环”。对于 JavaScript,事件循环由浏览器处理。你不必关心它。只需注册事件处理程序,您的代码就会开始运行。

现在请注意其他注释,findPlace 函数内部存在逻辑问题需要解决。

<小时/>

编辑:为了做出更完整的答案,您的 if/else 结构应如下所示:

window.addEventListener("deviceorientation",findPlace);

function findPlace(evt) {
  if (evt.alpha >= 0 && evt.alpha < 90) {
    ...
  }
  else if (evt.alpha >= 90 && evt.alpha < 180) {
    ...
  }
  else if (evt.alpha >= 180 && evt.alpha < 270) {
    ...
  }
  else if (evt.alpha >= 270 && evt.alpha < 360) {
    ...
  }
  else {
    unit.goToScreenAction(ctx, { screen: unit.find('Nada') }, noop);
  }
}

不确定 alpha 的情况恰好 360。规范说这可能会发生,但它相当于 0。无论如何,这是一种罕见的情况,并且不会'不会造成太多麻烦。

关于javascript循环遍历多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687521/

相关文章:

javascript - React-native 异步获取返回 null

javascript - 我怎样才能停止我的浏览器窗口跳舞

javascript - 是否可以使用 Javascript 使 .manifest 缓存失效?

javascript - 命名一个按钮javascript

javascript - 鼠标悬停在内部元素上时鼠标悬停丢失

api - 使用 JavaScript 绘制带有可点击点的线条

javascript - 从数组中提取值并将它们转换为字符串的最佳方法(允许 ES6)是什么?

javascript - D3堆栈布局问题

javascript - 如何使用 .css() 应用 !important?

javascript - 在新窗口中打印 HTML 代码的 DOM 树