【问题标题】:Variable undefined inside of set timeout在设置超时内未定义变量
【发布时间】:2020-12-01 05:06:03
【问题描述】:

为什么第一次迭代后 eta 变量未定义?我查看了闭包、可调用函数、绑定,但我不确定交易是什么......

var eta = 5400

function runCode() {
  function queryEta(eta) {
    // redo the eta lol
    setTimeout(function() {
      console.log(eta)
      queryEta()
    }, eta);
  }

  queryEta(eta);
}

runCode()

【问题讨论】:

    标签: javascript scope closures settimeout


    【解决方案1】:

    当您在没有任何参数的情况下调用 queryEta() 时,queryEta 中的 eta 参数是未定义的(并且会遮盖顶部定义的参数)

    【讨论】:

      【解决方案2】:

      当您创建具有相同名称的本地范围参数时,您正在重新定义 eta 变量在函数内部的含义。

      另外,不要忘记将参数传递给内部函数内部的函数调用。

      如果您在理解范围界定方面遇到困难,请查看教程,例如"JavaScript Scope and Closures".

      var globalEta = 5400;
      
      function runCode() {
        function queryEta(localEta) {
          setTimeout(function() {
            console.log(localEta)
            queryEta(localEta); // Make sure you pass this in!
          }, localEta);
        }
      
        queryEta(globalEta);
      }
      
      runCode()

      您可以访问该窗口...

      var eta = 5400;
      
      function runCode() {
        function queryEta(eta) {
          setTimeout(function() {
            console.log(eta)
            queryEta(eta); // Make sure you pass this in!
          }, eta);
        }
      
        queryEta(window.eta); // Here!
      }
      
      runCode()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 2015-08-13
        相关资源
        最近更新 更多