设置超时内未定义的变量

问题描述

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

var eta = 5400

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

  queryEta(eta);
}

runCode()

解决方法

在不带任何参数的情况下调用queryEta()时,eta中的queryEta参数是不确定的(并且阴影在顶部)

,

在创建具有相同名称的本地范围参数时,您正在重新定义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()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...