【问题标题】:JS Strict Mode - Accessing boolean variableJS 严格模式 - 访问布尔变量
【发布时间】:2019-02-14 15:07:24
【问题描述】:

所以我查看了整个 Stack Overflow 并发现了类似的问题,但找不到可以适用于我的问题。我处于严格模式,并且我已经定义了一个变量(loaded = false),并尝试根据它的真假来执行 if/else 语句......并且在它运行一次之后,我希望它切换到“真”所以它不会再次运行。下面是代码:

"use strict"
let loaded = false;
if (loaded === false) {
  //do an action
  loaded = true;
}

但是我在“loaded = true”处收到一个错误,上面写着“从未使用过分配的值”。我假设这是一个范围界定问题,但我不知道还能怎么做?

谢谢!

*更多详情: 这是我正在使用的代码.. 显然其中一些是不可读的,因为使用了其他变量,但也许这会有所帮助。

let loaded = false;

  if (loaded === false) {
    // animate swipe on map load
    this.view.when().then((() => {
    setTimeout(() => { // delay 1500ms for the map to load a bit
      $(".movable").animate({left: "50%"},
        {
         duration: 1200,
         easing: 'easeInOutCubic',
         step: (function (now, fx) {
         this._setOption('swipeX', layerViewContainer.element.width * now / 100);
        }).bind(this)
      });
     }, 1800);
    }).bind(this));
   loaded = true;
  }

所以你看,我正在尝试将变量设置为 true,以便当他们在页面上执行操作时它不会再次运行......由于某种原因,更改页面上的某些内容会重新激活滑动(我不想发生这种情况)。

【问题讨论】:

  • 这不是错误,它只是来自您正在使用的一些 linter 的警告。当您编写更多实际使用 loaded 的代码时(您打算这样做,对吗?)它会消失。
  • 你还没有展示外部函数,但是当再次执行时,当然会创建并再次设置为 false。
  • @Dominic 这是一个很好的观点。那么我将如何创建循环以便它只发生一次(在这种情况下,当页面加载时)?
  • @ChaseMartin 在<body> 底部执行的任何脚本标签都将运行一次,或者您可以使用document.addEventListener('DOMContentLoaded', yourOnDocReadyFunc)。我的意思是,如果这段代码在一个可重用的函数中,那么它每次都会被设置为 false。

标签: javascript scope strict-mode


【解决方案1】:

这不是范围界定问题。

  1. 首先,将其设置为false
  2. 然后您的if 读取该值以便使用该值。
  3. 然后为它分配一个新值 (true)。
  4. 那么你就到最后了。

您的代码在更改后永远不会读取loaded,因此 linter 会抱怨,因为您设置它时没有任何目的。

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 2015-10-11
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多