【问题标题】:I can't change global variable inside setInterval es6我无法更改 setInterval es6 中的全局变量
【发布时间】:2017-03-21 02:36:14
【问题描述】:

当它出现时,我必须找到一个按钮。为了做到这一点,我使用 setInterval。当它找到这个按钮时,它会为我的变量提供所需的值。我在 setTimeout 内检查它,但在 setTimeout(在这些方法之外)之后,我的全局变量变成了与 setTimeout 之前一样。如何解决?

let foundValue;
function findById(id) {
  let interval = setInterval(() => {
    if (document.getElementById(id)){
      let foundValue = document.getElementById(id);
      clearInterval(interval);
    }
  }, 1000);
  return foundValue;
}

【问题讨论】:

  • 您有两条let foundValue 行。是故意的吗?
  • 删除第二个让......
  • 本质上,你有两个不同范围的变量叫做同一个东西
  • 我删除了这些让。情况没有改变
  • 你是在间隔后检查foundValue,还是检查findById返回的值,因为你return的方式不太可能是你想要的。

标签: javascript ecmascript-6 settimeout setinterval es6-promise


【解决方案1】:

第一:上面findInterval应该是Vaue。

second:即使 foundValue 也总是未定义。为什么?

let foundValue;
function findById(id) {
  let interval = setInterval(() => {
   
      foundValue = "x"
      clearInterval(interval);
   
  }, 1000);
  return foundValue;
}
findById('main');
alert (foundInterval);

【讨论】:

    【解决方案2】:

    这是因为您在setInterval 中重新声明了foundValue,所以您应该删除第二个let,例如:

    let foundValue;
    function findById(id) {
      let interval = setInterval(() => {
        if (document.getElementById(id)){
          foundValue = document.getElementById(id);
          clearInterval(interval);
        }
      }, 1000);
      return foundValue;
    }
    

    【讨论】:

    • 我删除了这些,但什么也没发生
    • 它对我的工作如下console.log(foundInterval) // is undefined 然后findById('element_id') 然后console.log(foundInterval) // contains element
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多